我们每次都在单独的线程中创建新的生产者连接(40个线程池,大多数时间将使用所有线程),并在工作完成时关闭它。它是一个Java进程。
并非总是如此,但有时紧密的连接需要10秒钟以上,并且观察到从未发布过特定消息。
可以请你帮忙。
Properties prop = new Properties();
prop.put("bootstarp.servers",--);
prop.put("acks","all");
//some ssl properties
---
//ends
KafkaProducer connection = null;
try {
connection = new KafkaProducer<String, byte[]>(props);
msg.setTopic(topic);
msg.setDate(new Date());
connection.send(msg);
} catch() {
} finally {
connection.close();// sometimes it takes more than 10 secs and the above message was not send
}
生产者配置:
最大飞行中请求数/连接数= 5
acks =全部
batch.size = 16384
linger.ms = 0
最大块毫秒= 60000
request.timeout.ms = 5000
重试= 0
已更新:
如果我在connection.close()之前调用connection.flush()会影响性能吗?
由于超时设置为5000(request.timeout.ms),生产者发送的消息将失败,我可以将重试添加到1以使消息永不丢失吗?