在卡夫卡消费巨大的分区

时间:2016-08-30 18:39:05

标签: apache-kafka

我正在消耗一个包含50个分区和10M记录的巨大主题。所以,我期望每个分区有200000个。我使用了一个带循环方法的简单分区器来分配超过50个分区的10M。

当我运行我的消费者组时,我发现每个线程中的数据都不到200K,而且在某些线程中,我甚至没有得到任何消息。我错过了什么?

总的来说,我只能在~800k到1.3M之间

这是我的消费者配置

props.put("zookeeper.session.timeout.ms", "60000");
props.put("zookeeper.sync.time.ms", "2000");
props.put("auto.commit.interval.ms", "1000");
props.put("consumer.timeout.ms", "5000");
props.put("auto.offset.reset", "smallest");
props.put("session.timeout.ms", "5000");

2 个答案:

答案 0 :(得分:1)

  

当我运行我的消费者群体时,我发现数据不到200K   每个线程,在某些线程中,我甚至没有得到一个   消费消息。我错过了什么?

     

总的来说,我介于~800k到1.3M之间

消费不到200K,你究竟是什么意思? 您的消费者代码运行了多长时间?根据客户端,设置(代理和消费者)和您的设置(例如:消息大小),可能会出现消费者端CPU耗尽的情况,因此延迟时间更长。您报告的数字实际上是什么意思?它们是每秒,每分钟还是其他什么? 因此,您需要提供更多详细信息。如果它是总绝对数字的情况,那么您的设置有问题。因为即使您只运行一个使用者,它也应该从所有分区中消耗,只是可能需要更长的时间。

Kafka的工作方式是将分区分配给组内的消费者(一个消费者可能从多个分区消费,但一个分区总是分配给一个消费者)。

答案 1 :(得分:0)

增加消费者超时有助于消费所有消息。感谢Manav,消费者确实存在一些延迟,当我增加超时时,它起作用了。