zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Redis
    cz_health_day13项目实战
    cz_health_day11
    cz_health_day10
    cz_health_day09
    cz_health_day08
    MySQL8管理系列之二:从5.5升级到8的问题处理
    MySQL8管理系列之一:Mysql 8.0以后版本的安装
    MySQL 5.5.x 数据库导入到 8.0.x 服务器
    修改Mysql 8.0版本的默认数据库目录
  • 原文地址:https://www.cnblogs.com/fubinhnust/p/11967907.html
Copyright © 2011-2022 走看看