【问题标题】:Kafka local state store of multiple partitions多个分区的Kafka本地状态存储
【发布时间】:2019-01-21 17:57:34
【问题描述】:

我正在使用 kafka 处理器 api,并从 3 个分区的主题(我有 3 个代理)创建一个状态存储,我有 1 个流实例。我想知道我什么时候能拿到当地的州立商店,我能拿到所有的钥匙吗?为什么某些键有效但某些无效?正常吗? 谢谢

【问题讨论】:

标签: apache-kafka kafka-consumer-api apache-kafka-streams


【解决方案1】:

应用程序实例的数量对于这种情况无关紧要。因为输入主题有 3 个分区,所以使用 3 个分片创建状态存储。处理发生在 3 个并行任务中。每个任务都会实例化您的拓扑副本,处理一个输入主题分区,并使用一个分片。

比较:https://kafka.apache.org/21/documentation/streams/architecture

如果您想访问不同的分片,您可以使用“交互式查询”功能对所有分片进行键/值查找(以及查询的键范围)。

此外,还有全局状态存储的概念,它将所有分区中的数据加载到单个存储中(不是分片)。但是,与“常规”存储相比,它提供了不同的语义,因为存储更新与其他处理没有时间同步。

【讨论】:

  • 感谢您的回答,所以我无法获取 3 个分片的所有状态存储内容,那么如何获取所有这些内容?
  • 还有一个问题,如果我理解得很好,kafka流实例的数量与机器的数量并不相同,有没有办法检测kafka流实例的数量?
  • 编辑了我的答案。对于“Kafka Streams”实例,它表示您创建的客户端对象的数量(即属于同一application.idnew KafkaStreams())。请注意,每个实例的线程数也很重要。您不能拥有比输入主题分区(所有实例的所有线程的总和)更多的线程,因为一个主题分区只能由单个线程处理。所有其他线程将处于空闲状态,不处理任何数据。
  • 谢谢,kafka 实例很清楚。但在我的情况下,由于输入主题有多个分区,有几个状态存储分片(只有一台机器和一个 kafka 实例),我发现当我使用本地状态存储获取密钥时,一些密钥有效,而另一些无效。那么我怎样才能得到这些地方国有商店的所有内容呢?
  • 嗨@jianma。正如 Matthias 所解释的,您可以使用“交互式查询”来获取“其他”状态存储中的值。您可以在docs.confluent.io/current/streams/developer-guide/… 获得有关交互式查询的更多一般信息,更具体地说,如何实现和查询:docs.confluent.io/current/streams/developer-guide/…
猜你喜欢
  • 2018-10-24
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
  • 2019-03-15
  • 1970-01-01
  • 2019-07-08
  • 2020-07-22
  • 1970-01-01
相关资源
最近更新 更多