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

在连接两个KStream时,需要对Kafka流进行共分区

姚烨
2023-03-14

最近,我开始为即将到来的项目阅读Kafka流,偶然发现了一个概念,即如果我们想要加入两个流,就需要进行共分区。我所能理解的是,如果我们有两个主题A和B,它们都必须有相同数量的分区,对于键“X”,这两个主题的分区号也必须相同。

主题A带分区A0, A1, A2主题B带分区B0, B1, B2

然后,键为“X”的消息必须分别在A0和B0中发布。

问题:为什么两个主题的分区数必须相同(对于“X”键),以及如果我们在两个主题中有相同数量的分区,但一些分区是空闲的,即消息没有均匀地分布在分区中,我们可能会面临什么问题。

共有1个答案

赵俊侠
2023-03-14

当您进行Kafka流媒体时,会使用Kafka群组消费者。因此,您的主题分区是根据Kafka分区策略分配的。默认值是范围赋值器。阅读这里了解更多信息。

要连接两个流,具有相同密钥的两个消息应该在同一个消费者实例中可用。否则,您的流媒体消费者无法找到要连接的其他消息。为了确保这一点,两个主题的分区号应该相同,密钥应该相同。

当两个主题的分区号相同时,Kafka Partitioning Range Assigner确保将相同的分区分配给相同的实例

这是Kafka的观点。在应用程序方面,制作者应该确保使用哈希分区器生成消息。这是默认值。然后,如果两个主题的分区数相同,则哈希确保两个主题的相同键应该位于相同的分区数。

Kafka流媒体共分区是为了确保你的主题没有这些东西。

 类似资料:
  • 我开始阅读Kafka Stream应用程序,在每个教程/示例中,通过比较KStream和GlobalkTable中的键来丰富数据。在我的情况下,我需要将KStream记录的值中的一个项与GlobalKTable中的一个键进行比较。如何实现这一点的任何想法或例子。

  • 基于apache Kafka文档,我的问题是如何控制窗口的大小?保持主题上的数据的大小是一样的吗?或者例如,我们可以将数据保留一个月,但只加入过去一周的流? 有没有什么好的例子来展示一个窗口的KStream-to-kStream窗口连接? 在我的例子中,假设我有2个KStream、和我希望能够加入10天的到30天的。

  • 有没有人发帖回应这个问题?还有其他帖子没有答案。我们的情况是,在流流程的第一步中,我们将消息推送到支持KTable的主题上。然后我们从这些消息中提取少量数据并将其传递出去。我们正在对较小数量的数据进行多次计算,以便进行分组和聚合。在流式处理的最后,我们只想通过一个KTable连接回原来的主题,以便再次获取完整的消息内容。联接的结果只是数据的一个子集,因为它无法在KTable中找到条目。 这只是问题

  • 我有两个Kafka主题-和。第一个主题包含由唯一Id(称为)键入的recommendations对象。每个产品都有一个用户可以单击的URL。 主题获取通过单击推荐给用户的产品URL生成的消息。它是如此设置的,这些单击消息也由键控。 请注意 > 每个单击对象都会有一个相应的推荐对象。 click对象的时间戳将晚于Recommensions对象。 建议和相应的点击之间的间隔可能是几秒钟到几天(最多7天

  • 我试图连接两个Ktable流,似乎作为连接操作的一个输出,我两次得到与输出相同的消息。似乎在此操作过程中调用了两次值Joiner。 让我知道如何解决这个问题,以便只有一条消息作为加入操作的输出发出。 由于两个ktable(msg1和msg2)之间的连接,我收到两条相同的消息。