消息队列 CKafka 版

Consumer Group 问题

最近更新时间:2025-03-17 14:34:24

我的收藏

1. 怎样设置合理的消费者数量?

消费组和消费者的对应关系如下:
一个消费者可以同时订阅多个 Topic。
一个 Topic 里面包含了1到多个分区。
一个分区只能被一个消费者消费。
所以,一个消费组里面,消费者数量上限 = topic1的分区数 + topic2的分区数 +...... + topicN 的分区数。
关于消费者的定义:消费者在代码层面指的是一个 Consumer 的对象,一个机器上可以有多个消费者,例如起多个线程,一个线程里面有一个 Consumer,以此类推,如下面代码所示:
Properties props = new Properties();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrap);
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Arrays.asList(topic));
while (true) {
ConsumerRecords<String, String> records = consumer.poll(100);
}
初始的消费者数量可以根据客户端的资源情况进行初始的部署,然后配置消费者组的堆积告警,如果出现堆积的时候再扩容消费者。配置告警方式参见 配置告警

2. 为什么我看不到消费者详情?

消费者详情,包括消费者消费的 Topic、分区进度以及客户端等信息。这些信息是消费者处理完成消息,向服务端提交 offset 后,服务端进行存储的。以下情况客户端不会自动往服务端提交 offset 存储请求:
1. 使用自定义分区消费的模式;
2. 使用 Flink + CKafka 实现大数据场景,Flink 集群消费由于不提交 offset,也不通过 coordinator 进行 partition rebalance,所以在服务端没有对应的消费状态以及消费 pod IP 信息。
如果排除上述场景后,可以参见 Consumer Group 列表详情缺失 进行问题排查。

如果遇到产品相关问题,您可咨询 在线客服寻求帮助。