Producer:
- block.on.buffer.full = true 尽管该参数在0.9.0.0已经被标记为“deprecated”,但鉴于它的含义非常直观,所以这里还是显式设置它为true,使得producer将一直等待缓冲区直至其变为可用。否则如果producer生产速度过快耗尽了缓冲区,producer将抛出异常
- acks=all 很好理解,所有follower都响应了才认为消息提交成功,即"committed"
- retries = MAX 无限重试,直到你意识到出现了问题:)
max.in.flight.requests.per.connection
= 1 限制客户端在单个连接上能够发送的未响应请求的个数。设置此值是1表示kafka broker在响应请求之前client不能再向同一个broker发送请求。注意:设置此参数是为了避免消息乱序
- 使用KafkaProducer.send(record, callback)而不是send(record)方法 自定义回调逻辑处理消息发送失败
- Callback逻辑中最好显式关闭
KafkaProducer.close(0)
,设置此参数是为了避免消息乱序,在Callback的失败处理逻辑中显式调用KafkaProducer.close(0),这样做的目的是为了处理消息的乱序问题。若不使用close(0),默认情况下producer会将未完成的消息发送出去,这样就可能造成消息乱序。
Broker:
- unclean.leader.election.enable=false 关闭unclean leader选举,即不允许非ISR中的副本被选举为leader,以避免数据丢失
- replication.factor >= 3 这个完全是个人建议了,参考了Hadoop及业界通用的三备份原则
- min.insync.replicas > 1 消息至少要被写入到这么多副本才算成功,也是提升数据持久性的一个参数。与acks配合使用
- 保证replication.factor > min.insync.replicas 如果两者相等,当一个副本挂掉了分区也就没法正常工作了。通常设置replication.factor = min.insync.replicas + 1即可
Consumer:
- enable.auto.commit=false 关闭自动提交位移
- 在消息被完整处理之后再手动提交位移
posted @
2022-11-24 16:21
hongdada
阅读(
87)
评论()
编辑
收藏
举报