差异|Kafka Streams与其他流处理平台的差异在哪里?( 四 )


差异|Kafka Streams与其他流处理平台的差异在哪里?
本文插图

分布式系统中的 2PC 常见于数据库内部实现或以 XA 事务的方式供各种异质系统使用 。 Kafka 也借鉴了 2PC 的思想 , 在 Kafka 内部实现了基于 2PC 的事务机制 。
但是 , 对于 Kafka Streams 而言 , 情况就不同了 。 它天然支持端到端的 EOS , 因为它本来就是和 Kafka 紧密相连的 。
下图展示了一个典型的 Kafka Streams 应用的执行逻辑 。

差异|Kafka Streams与其他流处理平台的差异在哪里?
本文插图

通常情况下 , 一个 Kafka Streams 需要执行 5 个步骤:
读取最新处理的消息位移;
读取消息数据;
执行处理逻辑;
将处理结果写回到 Kafka;
保存位置信息 。
这五步的执行必须是原子性的 , 否则无法实现精确一次处理语义 。
在设计上 , Kafka Streams 在底层大量使用 Kafka 事务机制和幂等性 Producer 来实现多分区的原子性写入 , 又因为它只能读写 Kafka , 因此 Kafka Streams 很容易地就实现了端到端的 EOS 。
总之 , 虽然 Flink 自 1.4 版本也提供与 Kafka 的 EOS , 但从适配性来考量的话 , 应该说Kafka Streams 与 Kafka 的适配性是最好的 。
总结
好了 , 我们来小结一下 。 本文重点分享了 Kafka Streams 与其他流处理框架或平台的差异 。 总的来说 , Kafka Streams 是一个轻量级的客户端库 , 而其他流处理平台都是功能完备的流处理解决方案 。 这是 Kafka Streams 的特色所在 , 但同时可能也是缺陷 。 不过 , 我认为很多情况下我们并不需要重量级的流处理解决方案 , 采用轻量级的库 API 帮助我们实现实时计算是很方便的情形 , 我想 , 这或许是 Kafka Streams 未来的破局之路吧 。
【差异|Kafka Streams与其他流处理平台的差异在哪里?】


推荐阅读