【问题标题】:Kafka Streams - one on two does not operate - wrong partition assignmentsKafka Streams - 一对二不起作用 - 分区分配错误
【发布时间】:2018-09-26 17:25:46
【问题描述】:

在我公司的一个应用程序中,为了对称为 LIVE 和 PRE-MATCH 的 2 组消息应用一些转换,我们创建了 2 个 Kafka 流,每个组一个。 这两个流均已正确启动,但其中一个始终是按时间顺序创建的第二个流,不会进行任何更改:我的意思是它不消耗从开始主题开始的任何内容。

分析日志,主题和分区的配置肯定有问题:

2018-09-26 11:36:59,963 [INFO ] [] [StreamThread-2] [o.a.k.c.c.i.ConsumerCoordinator] - Setting newly assigned partitions [] for group Union
2018-09-26 11:36:59,963 [INFO ] [] [StreamThread-1] [o.a.k.c.c.i.ConsumerCoordinator] - Setting newly assigned partitions [betgenius.integralfeed.live-0] for group Union

正如您在上面的日志部分中看到的,与 LIVE 提要相关联的 StreamThread-1 获得了映射到正确源主题的分区的正确分配; StreamThread-2,在这种情况下与 PRE-MATCH 提要相关联,似乎接收到一个空源主题的分区分配,实际上是一个不运行的。

如果我人为地强制在 LIVE 之前创建 PRE-MATCH 流,情况就相反了。

用于创建 2 个流的代码完全相同,我只是更改了开始主题和结束主题。

我的 Kafka 配置是否可能没有足够的可用资源?

【问题讨论】:

    标签: java apache-kafka apache-kafka-streams


    【解决方案1】:

    根据提供的日志,您似乎对两个 Kafka 流使用相同的 groupId Union,但它们对于每个流应该是唯一的。所以请确保您为设置属性application.id 提供了不同的值。

    application.id - 流处理应用的标识符,在 Kafka 集群内必须是唯一的。

    【讨论】:

    • 我确认我对两个流使用相同的application.id:我虽然这个属性标识了整个应用程序,而不是单个流,这就是我使用相同 ID 的原因......我会尝试更改它并让您知道
    • 这就是问题所在,application.id 对于不同的流应该是不同的。这个属性的想法:如果你在多个服务器上运行同一个应用程序,特定流在所有服务器上将具有相同的application.id 值(因此流流将在同一个消费者组中),但不同的流应该具有唯一的值。例如第一个流的值是firstAppId,第二个是secondAppId,如果你在另一台服务器上启动你的应用程序,流仍然会有firstAppIdsecondAppId的值。
    猜你喜欢
    • 1970-01-01
    • 2018-10-08
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多