Kafka Stream StateStore是全球所有实例还是本地实体?

问题描述 投票:8回答:2

在Kafka Stream WordCount示例中,它使用StateStore来存储字数。如果同一个使用者组中有多个实例,那么StateStore对于该组是全局的,或者只是消费者实例的本地实例?

Thnaks

apache-kafka apache-kafka-streams
2个回答
18
投票

这取决于您对州商店的看法。

  1. 在Kafka Streams中,共享一个状态,因此每个实例都包含整个应用程序状态的一部分。例如,使用DSL有状态运算符使用本地RocksDB实例来保存其状态的分片。因此,在这方面,国家是地方的。
  2. 另一方面,对状态的所有更改都写入Kafka主题。此主题不在应用程序主机上“活动”,而是在Kafka群集中,并且由多个分区组成,可以复制。如果出现错误,此changelog主题用于在另一个仍在运行的实例中重新创建失败实例的状态。因此,由于所有应用程序实例都可以访问更改日志,因此也可以认为它是全局的。

请记住,更改日志是应用程序状态的真实情况,而本地存储基本上是状态分片的缓存。

此外,在WordCount示例中,记录流(数据流)通过单词进行分区,使得一个单词的计数将由单个实例维护(并且不同的实例保持不同单词的计数)。

对于建筑概述,我推荐http://docs.confluent.io/current/streams/architecture.html

此博客文章也应该是有趣的http://www.confluent.io/blog/unifying-stream-processing-and-interactive-queries-in-apache-kafka/


3
投票

如果值得一提的是有一个GlobalKTable improvement proposal

每个KafkaStreams实例将完全复制GlobalKTable一次。也就是说,每个KafkaStreams实例将使用相应主题的所有分区。

从Confluent Platform的邮件列表中,我获得了这些信息

您可以使用Kafka 0.10.2(或主干)分支开始原型设计...

0.10.2-rc0已经有了GlobalKTable!

这是actual PR

那个告诉我的人是Matthias J. Sax;)

© www.soinside.com 2019 - 2024. All rights reserved.