有时,发布到kafka的消息丢失了

时间:2018-06-21 21:06:24

标签: apache-kafka kafka-consumer-api kafka-producer-api

嗨,我有一个自定义框架,该框架公开了API的发布和使用。我支持许多主题供用户发布和使用。这似乎很好用,除了偶尔在将消息发布到主题之后,我的使用者没有收到任何消息。这很奇怪,因为kafka正常运行。在此错过的消息之前和之后发送到其他主题的其他消息都可以正常工作。发生此事件后,还会向用户提供有关同一主题的消息。

如果有帮助,则每个主题只有一个分区。当我打开KafaServerLog / data目录并搜索特定主题时,在开发环境中,每次发布和使用时我都会看到条目。但是,这发生的问题(在客户端)日志文件为空。我在这里想念东西吗?

2 个答案:

答案 0 :(得分:0)

您是否在Kafka主题中看到该消息,但未传递给消费者?

调试或重新创建场景很困难,但是您可以为kafka生产者强制将ACKS设置为“全部”。还要进行验证,保存生产者发送的每条消息的RecordMetadata。这将有助于确认kafka确实已提交邮件。

但是不确定日志文件。

答案 1 :(得分:0)

生产者api为您提供了一个回调,可用于跟踪生产者中偶尔出现的问题。示例代码如下所示:

try (Producer<String, String> producer = new KafkaProducer<>(producerProps)) {
    producer.send(new ProducerRecord<String, String>("My-topic", "message payload"), new Callback() {
        public void onCompletion(RecordMetadata metadata, Exception ex) {
            if (ex != null) {
                LOGGER.warn(String.format("Failed to produce record. Got Exception: %s", ex));
            } else {
                LOGGER.info("Sent record successfully");
            }             
        }
    });
}