【发布时间】:2017-11-14 18:46:45
【问题描述】:
目前我只有一个主题分区和一个消费者。 但是我的消费者运行缓慢,所以我想在同一主题中添加新消费者。
但同时我也希望所有的消费者处理专有的消息集。
我无法确定应该创建多少个分区,以便在我想增加吞吐量和处理独占消息时添加消费者。
【问题讨论】:
标签: apache-kafka kafka-consumer-api
目前我只有一个主题分区和一个消费者。 但是我的消费者运行缓慢,所以我想在同一主题中添加新消费者。
但同时我也希望所有的消费者处理专有的消息集。
我无法确定应该创建多少个分区,以便在我想增加吞吐量和处理独占消息时添加消费者。
【问题讨论】:
标签: apache-kafka kafka-consumer-api
如果一个主题有 N 个分区,则可以启动一个包含 N 个消费者的消费者组,他们每个人都可以在其中一个分区上工作。
这样,每个消费者将获得一组不同的消息(除非涉及故障转移,否则某些消息可能会多次传递),如果工作负载均匀分布在所有分区中,这将实现负载平衡正确。
如果您的消费者少于 N 个,其中一些消费者将获得多个分区,但他们仍不会共享分区,并且每个消费者将获得大致相同数量的分区。
如果您有超过 N 个消费者,一些消费者将保持空闲状态(但可以充当热备用,以防其他消费者退出)。
这一切的关键在于你将这些消费者放在同一个消费者组中。这是向 Kafka 指示他们应该在它们之间划分分区的方式。如果您改为启动 N 个消费者组,则每个组将并行获取所有消息(每条消息将被处理 N 次)。
分区的主要缺点是您会丢失消息的总顺序。消息仅相对于同一分区中的其他消息按顺序传递。这对您的应用程序来说可能是也可能不是问题(如果是,您可以通过查看时间戳来重新安排应用程序中的内容)。
【讨论】: