【问题标题】:Kafka data loss, in producerKafka 数据丢失,在生产者中
【发布时间】:2018-11-22 10:52:44
【问题描述】:

我一直在尝试配置一个 Kafka 代理、一个主题、一个生产者、一个消费者。 当 producer 生产时,如果 Broker 宕机,就会发生数据丢失, 例如:

In Buffer:
Datum 1 - published
Datum 2 - published
.
. ---->(Broker goes down for a while and reconnects...)
.
Datum 4 - published
Datum 5 - published

为生产者配置的属性是:

bootstrap.servers=localhost:9092
acks=all
retries=1
batch.size=16384
linger.ms=2
buffer.memory=33554432
key.serializer=org.apache.kafka.common.serialization.IntegerSerializer
value.serializer=org.apache.kafka.common.serialization.StringSerializer
producer.type=sync
buffer.size=102400
reconnect.interval=30000
request.required.acks=1

数据大小小于配置的缓冲区大小.. 帮助我知道我哪里出错了...!

【问题讨论】:

  • 不确定具体是做什么的。我假设您在代理完成时尝试写入 Kafka 的消息没有得到 Kafka 的确认。如果消息没有被确认,则表明消息没有写入Kafka,生产者需要重新尝试写入消息。
  • 是的,解决方案是,尽可能多地重试,直到代理出现,所以最后一个偏移量将提交,重试值将写入代理。

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


【解决方案1】:

不确定你到底在做什么。我假设您在代理关闭时尝试写入 Kafka 的消息没有得到 Kafka 的确认。如果消息没有被确认,说明消息没有写入Kafka,生产者需要重新尝试写入消息。

最简单的方法是相应地设置配置参数retriesretry.backoff.ms

在应用程序级别,您还可以在send(..., Callback) 中注册Callback 以了解成功/失败。如果失败,您可以再次调用send() 重试发送。

【讨论】:

    猜你喜欢
    • 2017-02-28
    • 2019-08-10
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多