如何验证Kafka中分区或主题的大小?

时间:2017-10-05 09:26:32

标签: java apache-kafka

我想在Kafka生成记录之前验证分区大小。

我有一个自定义分区类,它给出了我的消息应该丢弃的确切分区号。

现在我的要求是我想在发送记录之前检查分区的大小。

 List<String> users = userService.findAllUsers();
            for (String user : users) {
            String msg = "Hello " + user;
            //Check size here
          producer.send(new ProducerRecord<String, String>(topic, user, msg), new Callback() {
                    public void onCompletion(RecordMetadata metadata, Exception e) {
                        if (e != null) {
                            e.printStackTrace();
                        }
                    }
                });

卡夫卡有什么方法可以实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

容量纯粹是卡夫卡经纪人级别方面。 基本上,如果代理的数据目录中有磁盘空间,您可以传递消息。代理会根据时间和分区大小(代理配置中的内容)清除消息,因此,如果您相应地配置代理,则可能始终有空间 - 旧消息将被丢弃。它可能不适合您的业务用例。

此外,回复您的评论Can we check size of Topic,您实际上可以使用beginningOffsets&amp;来检查分区的当前大小。 endOffsets中的KafkaConsumer方法。请注意,如果分区不存在,这些方法可能会阻塞(至少在0.10.2中)。例如当主题实际包含3个分区时,请求分区4的数据。

Kafka 0.11在客户端引入了管理功能,但它仍在进行中。