我注意到一段时间(例如两天)之后,消费者组的并发性比我配置的低。
我使用Spring Boot,这是我的代码示例
factory.setConcurrency(10);
当我在说明kafka消费者后使用以下kafka命令时,它会显示10个不同的消费者客户端
bin/kafka-consumer-groups.sh --describe --group samplaConsumer --bootstrap-server localhost:9092
一段时间后,当我运行较高级别的命令时,消费者客户端会降低,例如6个不同的客户端并管理这10个分区。
如何解决此问题,以便在重新平衡后或无论多少客户端保持不变
答案 0 :(得分:1)
我发现,如果消费者客户花费比max.poll.interval.ms
多的时间来处理轮询的数据,则消费者认为失败,并且该组将重新平衡。
max.poll.interval.ms
使用使用者组管理时,两次poll()调用之间的最大延迟。这为使用者在获取更多记录之前可以处于空闲状态的时间设置了上限。如果在此超时到期前未调用poll(),则认为使用方失败,该组将重新平衡以将分区重新分配给另一个成员。
我发现,如果发生这种情况,消费者客户认为已死,并且不再进行任何重新平衡,因此消费者并发客户的数量将减少。
我想到的一种解决方案是,我可以减少max.poll.records
的数量,以便处理记录所需的时间少于max.poll.interval.ms
。
props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, 50); // default is 200