当前位置: 首页 > 知识库问答 >
问题:

当使用多个分区监听主题时,如何确保Kafka流处理所有相关数据?

焦光霁
2023-03-14

我想知道Kafka流是如何分配到主题的分区进行阅读的。据我所知,每个Kafka流线程都是一个消费者(该流有一个消费者组)。所以我猜消费者是随机分配到分区的。

话题P包含人称。它有两个分区。消息的关键是person ID,因此每个属于person的消息最终都位于同一个分区中。

主题O包含订单。它有两个分区。假设密钥也是(订购某样东西的人的)person-id。因此,在这里,属于一个人的每个订单消息总是在同一个分区中结束。

现在我有了stream,它从两个主题中读取,计算每个人的所有订单,并将其写入另一个主题(其中消息还包括该人的名字)。

分区2:“John,ID=2”

主题O中的数据

分区1:“Person-ID=2,Pizza”,“Person-ID=3,Cola”

流1被分配给主题P分区1和主题O分区1。

流2被分配给主题P分区2和主题O分区2。

这意味着,Hans的顺序lasagne永远不会被计算在内,因为为此,流需要使用主题P分区1和主题O分区2。

共有1个答案

东方明亮
2023-03-14

您的用例是一个KStream-KTable联接,其中KTable存储用户信息,而KStream是顺序流,因此这两个主题必须共同分区,它们必须具有相同的分区号,并且由相同的键和分区器进行分区。如果您使用person-id作为kafka消息的键,并且使用相同的分区器,则不必担心这种情况,因为它们位于相同的分区号上。

更新:正如Matthias指出的,每个流线程都有自己的消费者实例。

 类似资料:
  • 我有一个带有2个分区的源主题,我正在用同一个应用程序启动2个kafka streams应用程序。id,但不同的接收器主题。 1) 这两个应用程序实例是否会从不同的分区接收数据? 2)如果其中一个应用程序被杀死,另一个实例会自动从两个实例中消耗吗? 3) 我如何证明上述情况?

  • 我有一个应用程序需要收听多个不同的主题;每个主题都有关于如何处理消息的单独逻辑。我曾想过为每个KafkaStreams实例使用相同的kafka属性,但我得到了如下所示的错误。 错误 流处理应用程序的标识符。在Kafka集群中必须是唯一的。它用作1)默认的客户端ID前缀,2)用于成员资格管理的组ID,3)变更日志主题前缀。 问题 此错误意味着什么,以及导致此错误的原因。 假设您可以有应用程序的多个实

  • 我有一个主题T,它有4个分区TP1、TP2、TP4和TP4。 假设我有8条消息M1到M8。现在当我的制作人将这些消息发送到主题T时,在以下场景下,Kafka经纪人将如何接收它们: 场景1:只有一个kafka broker实例具有前面提到的分区的主题T。 现在假设kafka broker实例1宕机,消费者会作何反应?我假设我的使用者正在读取broker实例1。

  • 我试图实现Kafka主题分区的并发处理使用反应堆Kafka与自动确认。这里的文档使它看起来像是可能的: http://projectreactor.io/docs/kafka/militare/reference/#并发订购 这与我尝试的唯一不同之处在于我使用的是自动确认。 对我做错了什么有什么想法吗?

  • 我读了很多文章,但没有找到如何使用Spring Integration Kafka配置具有多分区主题(在运行时创建主题)的Producer。 我正在使用github链接来理解并为我的应用程序配置kafka。 请提供解决方案 还有一点,KafKaheader.MessageKey的用途是什么。 我得到空指针异常。下面是提及日志: 谢谢

  • 我们使用的是 Kafka 2.5.1 版本集群。最近注意到其中一个主题分区数据大小不均匀。与其余分区相比,一个特定分区的大小增加了 300%。这在群集中造成了不均衡的磁盘利用率。 已验证使用者滞后,看起来像其他分区一样正常 此外,我们使用默认分区程序和设置为默认值的“metadata.max.age.ms”配置,即 300000ms(5 分钟) 我们是如何使分区数据均匀分布的?