Kafka 生产者无消息丢失配置

Posted fubinhnust

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kafka 生产者无消息丢失配置相关的知识,希望对你有一定的参考价值。

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 生产者无消息丢失配置的主要内容,如果未能解决你的问题,请参考以下文章

kafka-2-生产者分区机制/消息压缩/无丢失配置介绍

kafka零数据丢失的配置方案

Kafka快速入门——Kafka高级功能

Kafka快速入门——Kafka高级功能

Kafka消息保证不丢失和重复消费问题

今天面试总结,关于kafka 保证消息不丢失问题