【问题标题】:Kafka Streams: Reading from topic with multiple partitionsKafka Streams:从具有多个分区的主题中读取
【发布时间】:2017-10-08 06:32:39
【问题描述】:

我有一个包含 2 个分区的源主题,并且我正在启动 2 个具有相同 application.id 但不同接收器主题的 kafka 流应用程序。

1) 2 个应用实例会从不同的分区接收数据吗?

2) 如果其中一个应用程序被杀死,另一个实例会自动消耗这两个实例吗?

3) 如何证明上述场景?

【问题讨论】:

  • 查看日志即可。 Kafka Streams 记录分区和任务分配。

标签: apache-kafka apache-kafka-streams


【解决方案1】:

Kafka Streams 使用相同的消费者库,因此行为应该与您所描述的相匹配 - 如果您有 2 个应用程序,那么每个应用程序都会从​​分配给它的分区中消费,如果一个被杀死,那么活着的将处理来自所有分区...

可以通过运行应用程序来证明,例如 - 在最简单的情况下,只需为使用的数据打印不同的前缀,并提交键控值,这样您就可以区分一条消息何时发送到一个分区和发送到另一个分区的消息......

【讨论】:

    【解决方案2】:

    1) 2 个应用实例会从不同的分区接收数据吗?

    是的。

    2) 如果其中一个应用程序被杀死,另一个实例会自动消耗这两个实例吗?

    是的。 (但请记住,其他实例现在可能会将输出数据发送给它自己,而不是原始实例的输出主题。)

    3) 如何证明上述场景?

    您可以检查应用程序的日志(Kafka Streams 将记录有关每个实例的主题/分区/流任务的信息),您可以运行集成测试等。

    【讨论】:

    • 感谢您的回复!是否可以运行具有相同应用程序 ID 但 2 个不同状态存储名称的 2 个不同的流应用程序?当我提供不同的状态存储名称时,我会为其中一个流应用程序获得此名称:DEBUG [.test.joins-08294d46-896a-4298-99da-c5a10f7969bb-StreamThread-1] Topic metadata fetch included errors: {.test.joins.-state_store_name_one-changelog=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.consumer.internals.Fetcher)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    相关资源
    最近更新 更多