关于Kafka Consumer 与 Partitions

版权声明:欢迎转载,注明出处即可 https://blog.csdn.net/yolohohohoho/article/details/88383546

Consumers and Consumer Groups

假设我们有一个应用程序需要从Kafka主题中读取消息,对它们运行一些简单的验证,并将结果写入另一个数据存储中。 因此,我们需要将创建一个Consumer对象,订阅相应的主题,并开始接收消息,验证它们并编写结果。 这可能会有一段时间,但如果写入主题的速率超过应用程序验证它们的速率怎么办? 如果您仅限于单个消费者阅读和处理数据,您的应用程序可能会滞后得越来越多,无法跟上传入消息的速度。 显然,需要从主题中扩展消费。 就像多个生产者可以写入同一主题一样,我们需要允许多个消费者从同一主题中读取,在它们之间分割数据。

当多个Consumer订阅同一个主题并属于同一个Consumer Groups时,该组中的每个Consumer 将从该主题中的不同分区中接收消息。

4个分区,1个Consumer 4个分区,2个Consumer
test test
4个分区,4个Consumer 4个分区,5个Consumer
test test

Kafka中扩展topic 数据的消费的方式主要是通过增加其partition数量,以便于设定更多的consumer来并行消费。

Kafka Consumer通常会进行高延迟操作,例如写入数据库或对数据进行耗时的计算。 在这些情况下,单个Consumer的消费速度可能跟不上数据流入主题的速率。
因此我们可以通过增加Kafka topic的分区数量,同时添加更多共享负载的consumer来进行扩展。

拥有多个分区的Kafka topic允许在负载增加时添加更多的Consumer,但当Consumer数目大于topic的分区数,多余的Consumer将会处于空闲状态。

  • 如果要确保应用程序获取topic中的所有消息,请确保应用程序具有自己的consumer group。

如果你的程序需要读取某个Kafka主题中的所有消息,那就给它指定一个独立的Consumer group。
如果你想扩展某个主题的消息消费速率,则在该消费程序所属的group中,增加新的consumer。

参考资料

Chapter 4. Kafka Consumers: Reading Data from Kafka

猜你喜欢

转载自blog.csdn.net/yolohohohoho/article/details/88383546