繁体   English   中英

获取spring kafka中未处理的消息数

get the unprocessed message count in spring kafka

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我们正在迁移到 Kafka,我需要创建一个监控 POC 服务,它会定期检查 Kafka 队列中未处理的消息计数,并根据计数采取一些行动。 但是这个服务不能读取或处理消息,指定的消费者会这样做,这个服务的每个 cron 只需要队列中存在的未处理消息的计数。 到目前为止,我已经从多个例子中做到了这一点

 public void stats() throws ExecutionException, InterruptedException {
    Map<String, Object> props = new HashMap<>();
    // list of host:port pairs used for establishing the initial connections to the Kafka cluster
    props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
    props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, false);
    props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
    props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
    props.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);

    try (final KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props)) {
    consumer.subscribe(Arrays.asList(topicName));
        while (true) {
            Thread.sleep(1000);
            ConsumerRecords<String, String> records = consumer.poll(1000); 
            if (!records.isEmpty()) {
                System.out.println("records is not empty = " + records.count() + " " + records);
            }
            for (ConsumerRecord<String, String> record : records) {
                System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
                Set<TopicPartition> partitions = consumer.assignment();
                //consumer.seekToBeginning(partitions);
                Map<TopicPartition, Long> offsets = consumer.endOffsets(partitions);
                for (TopicPartition partition : offsets.keySet()) {
                    OffsetAndMetadata commitOffset = consumer.committed(new TopicPartition(partition.topic(), partition.partition()));
                    Long lag = commitOffset == null ? offsets.get(partition) : offsets.get(partition) - commitOffset.offset();
                    System.out.println("lag = " + lag);
                    System.out.printf("partition %s is at %d\n", partition.topic(), offsets.get(partition));
                }
            }
        }
    }
}

代码有时运行良好,有时输出错误,请告诉我

1 个回复

不要订阅该主题; 只需创建一个具有相同组的消费者即可获得 endOffsets。

有关示例,请参阅此答案

3 kafka 服务器重启后丢失未处理的消息

我已经保留了auto.offset.reset = earliest 这里我的情况不同; 我有 1 个动物园管理员和 3 个经纪人。现在我停止了消费者并开始发布消息(假设有 4 条消息,后来我停止了 Kafka 服务器(1 个动物园管理员和 3 个经纪人),现在我组成了消费者。一段时间后我组成了 ...

5 Kafka –检查每个分区中的消息数

我已经实现了循环分区器,如下所示: 现在,我要测试每个分区具有相同数量的消息。 例如,如果我有1个具有32个分区的主题,并且向该主题发送了32条消息,则我希望每个分区都将只有1条消息。 我想做以下事情: 据我所知,Kafka Java API没有为我们提供这种功能,但是我 ...

6 如何在spring-kafka中的每个kafka消息之后提交?

在我们的应用程序中,我们使用 kafka 消费者来确定发送电子邮件。 前几天我们遇到了一个问题,kafka 分区在读取和处理所有记录之前超时。 结果,它循环回到分区的开头,无法完成它收到的记录集,循环开始后生成的新数据从未得到处理。 我的团队建议我们可以在读取每条消息后告诉 Kafka 进行提交 ...

7 在同一执行中处理Sync API调用(REST / Spring)和异步消息(Kafka)

我有一个用例来响应应该在Sync中发生的对客户端的API调用。 但是在api执行过程中,系统A需要将kafka消息发布到其他系统B,并且系统B将响应返回给系统A,该系统将消耗该响应,并且应以API响应的形式响应客户端。 因此,此问题在此处具有Async pub-sub模型以及Sync A ...

8 一个 Kafka 消费者处理的最大并发消息数

我有一个 Kafka Consumer 线程在 Spring-Boot 后端运行: 它处理来自多个群聊(到此主题)的主题“group_message”的大量并发消息,并根据接收者将它们发送到前端跺脚客户端。 现在我没有低负载问题,但是当有很多组和很多并发消息时,这个消费者是否能够像以前一样实时无 ...

10 获取kafka消息处理时间

我有 2 个服务:生产者和消费者。 据我了解, message.ts是生产者产生消息的时间(不是kafka-broker 收到消息的时间)。 问题 当消费者消费消息时,我怎么知道它在 kafka-broker 内部有多少时间(没有网络延迟:从生产者到 kafka-broker,从 kafka ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM