码迷,mamicode.com
首页 > 其他好文 > 详细

Kafka 生产者无消息丢失配置

时间:2019-12-01 23:04:21      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:集合   flight   false   cto   连接   cal   connect   接收   回调   

prodcer同步发送的机制虽然能保证消息不丢失,但是不推荐生产环境使用,性能很差。
一般都是采用异步方式发送消息,把消息先放入缓冲区,然后再由IO线程推送出去,存在消息丢失的风险,而且可能发生乱序。

下面给出Kafka无消息丢失的配置:

Producer端配置

  1. block.on.buffer.full = true
    0.9版本后已经废弃,改用max.block.ms代替,推荐用户显示设置为true,使得缓冲期填满时,producer处于阻塞状态并停止接收新的消息而不是抛出异常。

  2. acks = all
    保证消息写入所有ISR集合,才能确认提交确认成功

  3. retries = Integer.MAX_VALUE
    开启无限重试,当前producer只会重试那些可恢复的异常情况,所以放心的设置为一个较大的值

  4. max.in.flight.requests.per.connection=1
    主要防止topic同分区下的消息乱序问题,这个参数实际上限制了producer在单个broker连接上能够发送的未响应请求的数量。

  5. 使用带有回调机制的send

  6. Callback逻辑中显示关闭producer,显示调用kafkaProducer.close(0);

Broker端的配置

    1. unclean.leader.election.enable = false
      关闭unclean选举,不允许非ISR的副本被选举为Leader,从而避免broker端因日志水位截断造成的消息丢失

    2. replication.factor >=3
      参考了Hadoop以及业界的三备份原则

    3. min.insync.replicas > 1
      用于控制某条消息至少被写入ISR中多少个副本才算成功。设置大于1

    4. 确保replication.factor > min.insync.replicas
      若两者相等,那么只要一个副本挂掉,分区就无法工作。推荐replication.factor = min.insync.replicas + 1

Kafka 生产者无消息丢失配置

标签:集合   flight   false   cto   连接   cal   connect   接收   回调   

原文地址:https://www.cnblogs.com/fubinhnust/p/11967907.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!