我们现在有个业务,我们需要把数据发送给第三方kafka,但是现在发送的数量和对方收到的数量不一致,看日志发现有以下警告,但是没有报错:
2023-11-22T10:31:14.734+08:00 WARN [kafka-producer-network-thread | producer-22] [org.apache.kafka.clients.producer.internals.Sender:616] - [Producer clientId=producer-22] Got error produce response with correlation id 4558322 on topic-partition XXX-7, retrying (0 attempts left). Error: NETWORK_EXCEPTION. Error Message: Disconnected from node 8
2023-11-22T10:31:14.734+08:00 WARN [kafka-producer-network-thread | producer-22] [org.apache.kafka.clients.producer.internals.Sender:642] - [Producer clientId=producer-22] Received invalid metadata error in produce request on partition XXX-7 due to org.apache.kafka.common.errors.NetworkException: Disconnected from node 8. Going to request metadata update now
我们的一条数据很大,大概5M左右(因为一条数据包含了4张图片的base64),一条数据量也很大。这个报错说是因为网络问题导致重试机制生效,以下是我的生产者配置:
kafka.producer.acks=1
kafka.producer.retries=1
kafka.producer.batch-size=10485760
kafka.producer.buffer-memory=1073741824
kafka.producer.properties.max.requst.size=10485760
kafka.producer.properties.max.block.ms=180000
kafka.producer.properties.linger.ms=20
kafka.producer.properties.delivery.timeout.ms=7200000
现在也无法确定是不是因为重试次数过多,但是仍有问题,最终导致数据丢失。
求各位大佬解答啊,孩子实在没办法了。。
5M的消息,就不要批处理了:
# 较小的批次大小有可能降低吞吐量(批次大小为0则完全禁用批处理) batch.size=0
其次,既然已经生产超时,反复重试了,说明已经到了瓶颈。降低向kafka发送速度,防止阻塞而导致的超时,进而重试,最后丢消息。
批次大小设置为0,意思是说只要有消息过来就直接发送么,是否还会存到缓存中呢
是的,直接发,不会了。
好 感谢大佬,之后我再试试
你的答案