Java 卡夫卡数据丢失,在生产商

Java 卡夫卡数据丢失,在生产商,java,apache-kafka,kafka-consumer-api,kafka-producer-api,Java,Apache Kafka,Kafka Consumer Api,Kafka Producer Api,我一直在尝试配置一个卡夫卡经纪人、一个主题、一个制作人、一个消费者。 当生产者生产时,如果经纪人倒闭,数据就会丢失, 例如: 为生产者配置的属性包括: 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

我一直在尝试配置一个卡夫卡经纪人、一个主题、一个制作人、一个消费者。 当生产者生产时,如果经纪人倒闭,数据就会丢失, 例如:

为生产者配置的属性包括:

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
数据大小小于配置的缓冲区大小。。
帮我知道我哪里出错了

不知道你到底在做什么。我假设您在代理关闭时尝试写入卡夫卡的消息未被卡夫卡确认。如果消息未确认,则表示消息未写入卡夫卡,制作人需要重新尝试写入消息

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


在应用程序级别,您还可以在
send(…,Callback)
中注册
回调
,以获得成功/失败的通知。如果失败,您可以再次调用
send()
重试发送。

不确定您到底要做什么。我假设您在代理关闭时尝试写入卡夫卡的消息未被卡夫卡确认。如果消息未确认,则表示消息未写入卡夫卡,制作人需要重新尝试写入消息

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


在应用程序级别,您还可以在
send(…,Callback)
中注册
回调
,以获得成功/失败的通知。如果失败,您可以再次调用
send()
来重试发送。

不确定具体做什么。我假设您在代理完成时尝试写入Kafka的消息没有被Kafka确认。如果消息未确认,则表示消息未写入Kafka,生产者需要重新尝试写入消息。是的,解决方案是,尽可能多次重试,直到broker comesup,以便提交最后一个偏移量,并将重试值写入broker。不确定具体执行什么操作。我假设您在代理完成时尝试写入Kafka的消息没有被Kafka确认。如果消息未确认,则表示消息未写入Kafka,生产者需要重新尝试写入消息。是的,解决方案是,尽可能多次重试,直到broker comesup,这样最后一个偏移量将提交,重试值将写入broker。
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