• kafka如何保证数据的消息不丢失(最简洁)


    一、kafka 本身配置层面
    1.1、replication.factor 默认值1
    创建kafka的topic时候,每个分区设置的副本数, 根据broker数量酌情设置, 建议业界通常做法设置为3

    1.2、min.insync.replicas 默认值1
    消息至少要被写入到min.insync.replicas这么多副本才算成功时候,通常使用小于replication.factor,当request.required.acks = all时生效

    二、kafka的生产者层面
    2.1、设置副本确认
    request.required.acks 有3个取值,分别是0,1,all

    0:表示无需等待broker确认就认为写入成功,风险大,一般不使用

    1:表示当leader确认写入成功就认为成功了,有数据丢失风险,不建议使用

    all:leader和follower都确认写入成功,才能认为是写入成功了,推荐使用(-1在新版本已弃用)

    2.2、设置重试次数
    retries 默认值0,不重试。kafka返回写入消息失败,生产者进行重新发送,直到成功, 根据业务合理设置重试次数

    2.3、消息补偿机制
    虽设置了重试次数,但不可能一直重试,如重试3次后仍然失败,这时候可把失败消息放入本地消息表,用定时任务轮询消息表, 重新生产推送到kafka

    三、kafka的消费者层面
    3.1 关闭自动 offset
    设置 enable.auto.commit = false , 默认值true,自动提交

    3.2 手动提交offset
    使用kafka的Consumer的类,用方法consumer.commitSync()提交

    或者使用spring-kafka的 Acknowledgment类,用方法ack.acknowledge()提交(推荐使用)

  • 相关阅读:
    英语 年份 读法
    香农第二定理的理解
    为什么正规子群在环里的对应概念叫理想,而不叫正规子环呢?
    vue 时间组件限制选择范围
    ubuntu 设置 shell脚本双击运行
    单元测试规范
    vue-element-admin项目配置运行
    SqlServer表字段查询
    git提交部分文件
    Asp.NetCore+Elasticsearch+Kibana日志记录
  • 原文地址:https://www.cnblogs.com/lgg20/p/16179872.html
Copyright © 2020-2023  润新知