Kafka Stream简介

  Kafka Stream是Apache Kafka的主要功能,用于实时转换和组合数据流,那么它与其他流处理 Apache FlinkSpark Streaming 或 Reactive Kafka 有什么区别?

Kafka Stream是用于消费来自Kafka topic产生的数据,该库包并没有后压back-pressure 机制,一个 topology在某个时间处理一个元素,所谓topology是由多个源topic, 许多连接到流操作的数据处理器和多个sink topic组成。Kafka Stream会缓冲即将被kafka消费者拉取的元素,以及缓冲由Kafka生产者委托的即将进行批写入的元素。

这会大大简化了设计,注意:不支持异步操作,所以,你不能在你的数据处理器中有任何堵塞操作,否则会堵塞整个流。

两种类型

Kafka Stream定义了两种基本抽象:KStream 和 KTable,区别来自于key-value对值如何被解释,在一个流中(KStream),每个key-value是一个独立的信息片断,比如,用户购买流是:alice->黄油,bob->面包,alice->奶酪面包,我们知道alice既买了黄油,又买了奶酪面包。

另一方面,对于一个表table( KTable),是代表一个变化日志,如果表包含两对同样key的key-value值,后者会覆盖前面的记录,因为key值一样的,比如用户地址表:alice -> 纽约, bob -> 旧金山, alice -> 芝加哥,意味着Alice从纽约迁移到芝加哥,而不是同时居住在两个地方。

这两个概念之间有一个二元性,一个流能被看成表,而一个表也可以看成流。

 

运行

Kafka Stream是一个库包,意味着可以随着代码运行和发布,没有资源管理,没有主从节点等等,那么如何以分布式方式处理来自Kafak的topic数据?当你创建你的流,你指定一个应用id,当新的节点使用指定的应用id注册到Kafka的broker中时,被分配到每个节点topic分区将重新负载平衡,每个节点会接受到任务列表(分区+topology)用来运行。

还有流操作的标准操作如map和filter都适合Kafka Stream,Kafka Stream还支持有状态处理器,窗口设置,joining和聚合操作。

当然,如果需要异步事件处理,需要和各种数据源或sink集成,组合各种多个流,以后压方式处理,那么可以参考 Reactive Kafka;如果你寻求ML, SQL接口, 图处理或完整流处理框架,可以参考SparkFlink 和 Storm.

 

Apache Kafka简单介绍

大数据