【问题标题】:Apache Kafka StateStore阿帕奇卡夫卡状态存储
【发布时间】:2019-12-28 19:10:56
【问题描述】:

我正在学习 Apache Kafka(作为消息传递系统),并在此过程中了解了术语 StateStorelink here

我也知道Apache kafka streams,客户端 API。

StateStore 是适用于消息系统上下文中的Apache kafka 还是适用于Apache Kafka Streams

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

谁能帮我理解这个。

【问题讨论】:

  • 您可以使用任何能够存储“持久状态”的消息传递系统来实现“缓存”
  • @cricket_007:感谢您的 cmets。如果您能详细说明一下,将会有所帮助。
  • 启动消费者。将所有消息放入 Hashmap 或添加对像 Caffeine 这样的库的依赖
  • Kafka StateStore 的一个“好”之处在于,如果需要,您可以将其扩展到外部系统。例如,github.com/andreas-schroeder/redisks
  • @cricket_007:感谢您提供更多详细信息。所以Statestore 只是一个接口,我们可以让任何(某种SPI)实现它吗?顺便说一句,除了使用Rocksdb,apache 是否有任何 Statestore 的本机实现

标签: apache-kafka apache-kafka-streams rocksdb


【解决方案1】:

StateStore 适用于 kafka 流上下文。

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

【讨论】:

    【解决方案2】:

    good concise explanation 中添加关于 Kafka Streams 上下文中 StateStore 和您的问题的概述。

    Kafka 经纪人简介

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

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

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

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

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

    Kafka 客户端 API

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

    • Producer - 将消息发布到 Kafka 主题

    • 消费者 - 订阅 Kafka 主题

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

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

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

    Kafka 流状态存储

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

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

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

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

    此外,如果您想了解更多信息,这里是 Apache Kafka 官方文档中精彩介绍视频的链接:

    有一个很棒的学习体验!

    【讨论】:

      猜你喜欢
      • 2014-03-15
      • 2018-07-09
      • 2014-02-13
      • 1970-01-01
      • 1970-01-01
      • 2020-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多