我是卡夫卡的新手,我想要帮助
我有一个主题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个应用程序。
看起来它是每个消费者的一个分区。对我来说没什么意义或者我不明白。
是否有办法使这种负载平衡工作,而不必为每个使用者创建一个分区?
有人能向我解释一下这种关系是如何运作的吗?
发布于 2021-07-07 14:09:13
这是卡夫卡的基础--每个群体中只有一个消费者可以从一个分区中消费。主题/分区是一个简单的日志,它不像JMS或RabbitMQ中的队列。
Kafka只为每个组/主题/分区维护一个简单的当前提交偏移量。
添加并发性的唯一方法是增加分区。
发布于 2021-07-07 14:18:52
要增加吞吐量,您必须有多个分区。当事件被写入日志时,事件的ID将确定消息将传递到哪个分区。
Kafka只保证在ID上订购,而不是对整个日志进行排序。
我通常建议使用多个分区,即使您有一个节点,因为这允许集群在将来进行缩放以提高性能。
在主题创建之后,您不能更改分区的数量,因为这会对分区目标产生影响。
在您的示例中,如果集群中有3个节点,我将从每个节点3个节点开始,最多为9个节点--请自己测试。
每个分区有一个1名消费者的限制,这就是你看到的行为。
https://stackoverflow.com/questions/68286935
复制相似问题