生产者在重启Kafka时丢失了一些消息

时间:2019-03-20 08:39:55

标签: apache-kafka

Kafka客户端:0.11.0.0-cp1 卡夫卡经纪人:

在Kafka经纪人滚动重启时,我们的应用程序在发送给经纪人时丢失了一些消息。我相信滚动重启不会丢失任何消息。这些是我们正在使用的生产者(将生产者与异步send()结合使用,而不使用回调/未来等)设置:


val acksConfig: String = "all",
val retriesConfig: Int = Int.MAX_VALUE,
val retriesBackOffConfig: Int = 1000,
val batchSize: Int = 32768,
val lingerTime: Int = 1,
val maxBlockTime: Int = Int.MAX_VALUE,
val requestTimeOut: Int = 420000,
val bufferMemory: Int = 33_554_432,
val compressionType: String = "gzip",
val keySerializer: Class<StringSerializer> = StringSerializer::class.java,
val valueSerializer: Class<ByteArraySerializer> = ByteArraySerializer::class.java

我在日志中看到了这些异常

2019-03-19 17:30:59,224 [org.apache.kafka.clients.producer.internals.Sender] [kafka-producer-network-thread | producer-1] (Sender.java:511) WARN  org.apache.kafka.clients.producer.internals.Sender  - Got error produce response with correlation id 1105790 on topic-partition catapult_on_entitlement_updates_prod-67, retrying (2147483643 attempts left). Error: NOT_LEADER_FOR_PARTITION

但是日志显示还剩下重试次数,我很好奇为什么不重试呢?让我知道是否有人有想法吗?

1 个答案:

答案 0 :(得分:2)

需要注意的两件事:

  1. 您要生成的主题的复制因子是什么?min.insync.replicas所需的数量是多少?
  2. “生产者丢失了一些消息”是什么意思。生产者如果无法成功生产给#min.insync.replicas代理,它将抛出异常并失败(用于同步生产)。发生故障(同步或异步生产)时,应由生产者/客户端重试。