文章内容输出来源:拉勾教育Java高薪训练营;
kafka 消费者是做什么的?既然生产者是往 broker 中topic 特定的 分区发送消息。那么消费者就是从这些分区中读取消息了。那具体的流程又是怎么样的呢?有又哪些特性呢?接下来我们一起揭晓。
消费者和消费组
我们先来说说什么是消费者和消费组。
消费者是从订阅的主题中消费消息,一群消费者组成的一个消费组。多个从同一个主题消费的消费者可以加入到一个消费组中,消费组中的消费者共享group_id。也就是说消费组中的所有消费者的 group_id 是一样的。
注意消费组均衡地给消费者分配分区,每个分区只由消费组中一个消费者消费。这样就可以避免消息重复消费了。
如果消费组中消费者数量小于topic 中的分区数量,就说明有不同的分区指向了同一个消费者。
如果消费组中消费者的数量等于topic 中的分区数量,说明每个分区指定一个消费者。
如果消费组中国消费者的数量大于 topic 中的分区数量,说明消费组中会有空余的消费者。
这样的机制有什么好处?
可以分方便的横向扩展消费者。比如说,如果发现主题中分区很多,消费者组消费不过来,出现了消息的堆积。这个时候就可以拓展消费组,增加消费者,从而消除消息堆积的问题。
心跳机制
既然每个分区都绑定一个消费者,消费者和topic 之间就得检测心跳了。Kafka 的心跳是 Kafka Consumer 和 Broker 之间的健康检查,只有当 Broker Coordinator 正常时,Consumer 才会发送心跳。
也就是说,消费者从broker 中消费消息,创建的是一个长连接。并且在进行心跳检测,只有当broker 正常保持心跳时,才会进行消费消息。
反序列化
我们在生产者发送的消息的时候,有三个流程,拦截器、序列化器、分区器。那消费者