我正在学习Apache Kafka
(作为消息传递系统),在此过程中我知道了术语StateStore
,link here
我也知道客户端API Apache kafka streams
。
StateStore
适用于消息系统中的Apache kafka
还是适用于Apache Kafka Streams
。
Apache
是否拥有StateStore
的“自己的”实现或使用第三方实现(例如,rockdsb
。
任何人都可以帮助我理解这一点。
答案 0 :(得分:2)
StateStore适用于kafka流上下文。
某些处理器,例如 reduce 或 aggregate 是有状态操作。 Kafka流使用状态存储进行管理。默认情况下,它使用rocksDB,但可自定义。
答案 1 :(得分:2)
在Kafka Streams和您的问题的上下文中,为good concise explanation添加有关StateStore的概述。
在消息传递上下文中,您的工作将简化为:
发布状态(正在生成消息)
将消息保存一段时间以供以后使用(保留时间)
消费状态(获取消息)
简而言之,卡夫卡经纪人为您做的是#2加上容错能力并跟踪您的消费者群体的读取(偏移)位置。
除此之外,Kafka还提供了用于处理消息的常见模式的客户端库:
制作人-将消息发布到Kafka主题
消费者-订阅Kafka主题
连接-与外部存储(例如各种DBMS)创建可靠的集成。
流-DSL和实用程序旨在简化常见流应用程序模式的开发。
管理员-以编程方式管理/监视Kafka资源。
我会引用Streams Architecture docs中的精彩解释(我强烈建议您使用Kafka文档,因为它们的构建非常好,并且具有任何经验水平)。
Kafka Streams提供了所谓的状态存储,流处理应用程序可以使用它们来存储和查询数据,这是实现有状态操作时的一项重要功能。例如,当您调用诸如join()或gregation()之类的有状态运算符时,或者当您对流进行窗口化时,Kafka Streams DSL会自动创建并管理此类状态存储。
如您所见, StateStore 用作将内置功能从单个消息处理上下文扩展到多消息处理的帮助程序,从而在多条消息上启用更复杂的功能(在一个时间窗口中传递的所有消息,对多个消息的聚合功能,等等)
我要补充一点,RocksDB是Kafka使用的默认实现,可以如先前答案中所述进行更改。
此外,如果您想探索更多内容,请访问Apache Kafka官方文档中的精彩介绍视频链接:
有很棒的学习经验!