Apache Kafka 状态存储

Cur*_*ind 2 apache-kafka rocksdb apache-kafka-streams

我正在学习Apache Kafka(作为消息传递系统),并在这个过程中了解了术语StateStore链接在这里

我还知道Apache kafka streams客户端 API。

适用StateStoreApache kafka消息传递系统的上下文或适用于Apache Kafka Streams.

是否Apache有自己的“自己”实现StateStore或使用第三方实现(例如,rockdsb.

谁能帮助我理解这一点。

mat*_*anz 8

在 Kafka Streams 和您的问题的上下文中添加关于 StateStore 的良好简洁解释的概述。

卡夫卡经纪人简而言之

在消息传递上下文中,您的工作简化为:

  1. 发布状态(生成消息)

  2. 将消息保存一段时间供以后消费(保留时间)

  3. 消费状态(获取消息)

简而言之,#2 加上容错能力和跟踪消费者组读取(偏移量)的位置就是 Kafka 代理为您所做的事情。

Kafka 客户端 API

除此之外,Kafka 还为您处理消息的常见模式提供了客户端库:

  • Producer - 向 Kafka 主题发布消息

  • 消费者- 订阅 Kafka 主题

  • 连接- 创建与外部存储(例如各种 DBMS)的可靠集成。

  • Streams - DSL 和实用程序旨在简化常见流应用程序模式的开发。

  • 管理员- 以编程方式管理/监控 Kafka 资源。

Kafka Streams 状态存储

我将引用Streams 架构文档中的精彩解释(我强烈推荐 Kafka 文档,因为它们构建得非常好,适合任何级别的体验)。

Kafka Streams 提供了所谓的状态存储,流处理应用程序可以使用状态存储来存储和查询数据,这是实现有状态操作时的一项重要功能。例如,当您调用有状态运算符(例如 join() 或aggregate())或打开流窗口时,Kafka Streams DSL 会自动创建和管理此类状态存储。

正如您所看到的,StateStore被用作将内置功能从单个消息处理上下文扩展到多消息处理的帮助器,从而在一堆消息上启用更复杂的功能(在一个时间窗口中传递的所有消息,多个消息的聚合函数等)

我要补充一点的是,RocksDB 是 Kafka 使用的默认实现,可以按照前面的答案中提到的那样进行更改。

另外,如果您想了解更多信息,这里有一个来自 Apache Kafka 官方文档的精彩介绍视频的链接:

有一个很棒的学习体验!


小智 5

StateStore适用于kafka流上下文。

一些处理器(例如reduceaggregate)是有状态操作。Kafka 流使用状态存储来管理它。默认情况下,它使用rocksDB,但它是可定制的。