• Kafka 业务架构及消息丢失处理方案


    一、Kafka简介
    Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式消息中间件,它可以处理消费者在网站中的所有动作流数据。

    二、Kafka业务架构
    1、Kafka集群
    Kafka集群就是有多个kafka实例组成的分布式阵列,生产者producer发送消息到kafka的topic主题,consumer消费者也从topic拉取数据进行消费。集群的所有管理都交由zookeeper进行管理,当某一broker实例宕机,zookeeper会自动进行处理让集群恢复。
    在这里插入图片描述

    2、Kafka broker实例与分区

    一个broker就是一个kafka实例,一个broker中可以有多个partition分区,每个分区保存部分数据,所有分区数据总和就是完整的数据,不同的分区可以部署在不同的broker上来实现分布式高可用。一个partition分区分为主分区和副本分区,主分区主要负责数据处理,副本分区则是提供数据冗余,副本分区的数据同步方式是从主分区拉取数据。当主分区出现问题时候,副本分区可以重新选举主分区从而恢复集群。
    在这里插入图片描述

    三、消息丢失处理场景及处理方案
    1、丢失场景
    1.1 producer生产者丢失消息

    生产者发送消息后由于网络等原因并没有到kafka实例的场景
    处理方案:
    producer 端设置ack
    request.required.acks
    0:producer不等待broker的ack,broker一接收到还没有写入磁盘就已经返回,可靠性最低;
    1:producer等待broker的ack,partition的leader刷盘成功后返回ack,如果在follower同步成功之前leader故障,那么将会丢失数据,可靠性中;
    -1:producer等待broker的ack,partition的leader和follower全部落盘成功后才返回ack,可靠性高,但延迟时间长

    1.2 broker kafka消息中间件自身丢失消息
    消息已经发送到kafka,由于kafka异常情况或者宕机导致消息丢失
    处理方案:
    1.2.1 给 topic 设置 replication.factor 参数:这个值必须大于 1,要求每个 partition 必须有至少 2 个副本;
    1.22 在 Kafka 服务端设置 min.insync.replicas 参数:这个值必须大于 1,要求一个 leader 至少感知到有至少一个 follower 还跟自己保持联系,没掉队,这样才能确保 leader 挂了还有一个 follower ,可被选举为leader;
    1.2.3 在 producer 端设置 acks=-1:这个是要求每条数据,必须是写入所有 replica 之后,才能认为是写成功了;
    1.2.4 在 producer 端设置 retries=MAX(无限次重试):这个是要求一旦写入失败,就无限重试。

    1.3 consumer 消费者丢失消息
    消费者业务异常或者网络异常,kafka自动offset导致正常偏移,使得消息未消费丢失
    处理方案:
    关闭自动提交offset
    enable.auto.commit = true,不管执行结果如何,消费者会自动提交offset;
    enable.auto.commit = false,需要用户需要手动提交offset,可以根据执行结果具体处理offset。

  • 相关阅读:
    java计算机毕业设计教务系统MyBatis+系统+LW文档+源码+调试部署
    Unicode和UTF-8区别
    scrapy数据提取-实战-起点
    《PyTorch深度学习实践》第三讲 梯度下降算法
    微软Edge浏览器的辅助功能设置:提升用户体验的指南
    Java:垃圾收集 CPU 统计信息
    【算法基础】TOPSIS法
    反序列化漏洞(1), 原理, 实验, 魔术方法
    IOS 32位调试环境搭建
    C语言动态内存空间分配
  • 原文地址:https://blog.csdn.net/weixin_39970883/article/details/127570277