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 信息。