标签:集合 flight false cto 连接 cal connect 接收 回调
prodcer同步发送的机制虽然能保证消息不丢失,但是不推荐生产环境使用,性能很差。
一般都是采用异步方式发送消息,把消息先放入缓冲区,然后再由IO线程推送出去,存在消息丢失的风险,而且可能发生乱序。
下面给出Kafka无消息丢失的配置:
block.on.buffer.full = true
0.9版本后已经废弃,改用max.block.ms代替,推荐用户显示设置为true,使得缓冲期填满时,producer处于阻塞状态并停止接收新的消息而不是抛出异常。
acks = all
保证消息写入所有ISR集合,才能确认提交确认成功
retries = Integer.MAX_VALUE
开启无限重试,当前producer只会重试那些可恢复的异常情况,所以放心的设置为一个较大的值
max.in.flight.requests.per.connection=1
主要防止topic同分区下的消息乱序问题,这个参数实际上限制了producer在单个broker连接上能够发送的未响应请求的数量。
使用带有回调机制的send
unclean.leader.election.enable = false
关闭unclean选举,不允许非ISR的副本被选举为Leader,从而避免broker端因日志水位截断造成的消息丢失
replication.factor >=3
参考了Hadoop以及业界的三备份原则
min.insync.replicas > 1
用于控制某条消息至少被写入ISR中多少个副本才算成功。设置大于1
确保replication.factor > min.insync.replicas
若两者相等,那么只要一个副本挂掉,分区就无法工作。推荐replication.factor = min.insync.replicas + 1
标签:集合 flight false cto 连接 cal connect 接收 回调
原文地址:https://www.cnblogs.com/fubinhnust/p/11967907.html