【问题标题】:Kafka topic is not doing load balance for springboot consumer applicationsKafka主题没有为springboot消费者应用做负载均衡
【发布时间】:2021-09-18 01:16:16
【问题描述】:

我是 KAFKA 的新手,需要帮助

我有一个主题 XXXX,我有一些应用程序正在使用这个主题,都在听同一个组

spring.cloud.stream.bindings.aaa_bbb.destination=XXXX
spring.cloud.stream.bindings.aaa_bbb.group=XXXX_group

主题 XXXX 只有一个分区

向主题 XXXX 发送 1000 条消息,只有一个应用程序会消耗所有消息。

但是当我向主题 XXXX 添加一个新分区并将消息分为 2 个应用程序时,我仍然有应用程序没有收到任何东西。

我重复这个过程并为主题 XXXX 添加一个新分区 现在主题有 3 个分区,消息分为 3 个应用程序。

看起来它是每个消费者的分区。 这对我来说没有多大意义或者我不明白。

有没有办法让这种负载平衡发挥作用,而不必为每个消费者创建一个分区?

谁能向我解释一下这种关系是如何运作的?

【问题讨论】:

    标签: apache-kafka spring-kafka spring-cloud-stream-binder-kafka


    【解决方案1】:

    这是 Kafka 的基础——每个组中只有一个消费者可以从一个分区消费。主题/分区是一个简单的日志,它不像 JMS 或 RabbitMQ 中的队列。

    Kafka 只为每个组/主题/分区维护一个简单的当前已提交偏移量。

    增加并发的唯一方法是增加分区。

    【讨论】:

      【解决方案2】:

      要增加吞吐量,您必须拥有多个分区。当事件被写入日志时,事件的 ID 将决定消息将被传递到哪个分区。

      Kafka 仅保证对 ID 的排序,而不是对整个日志的排序。

      即使您只有一个节点,我通常也建议您使用多个分区,因为这样可以在将来扩展集群以提高性能。

      主题创建后,您无法更改分区数,因为这会影响分区目标。

      在您的情况下,如果集群中有 3 个节点,我将从每个节点 3 个开始,最多 9 个 - 请自行测试。

      每个分区有 1 个使用者的限制,这是您看到的行为。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-11
        • 1970-01-01
        • 2019-07-02
        • 1970-01-01
        • 1970-01-01
        • 2020-02-28
        • 2013-05-23
        相关资源
        最近更新 更多