• Kafka原理及概念解释


    1、zookeeper作用

    zookeeper在kafka中扮演了重要的角色,kafka使用zookeeper进行元数据管理,保存broker注册信息,包括主题(Topic)、分区(Partition)信息等,选择分区leader,在低版本kafka消费者的offset信息也会保存在zookeeper中。

    controller由Kafka选举

    leader由Kafka自身的controller选举

    kafka在zookeeper上存储的brokers节点信息如下:
    在这里插入图片描述
    其中/brokers/ids/[0...n]:是使用临时节点存储在线的是各个服务节点的信息,当下线后自动删除;

    2、broker

            可以简单理解集群节点,一个节点配置一个broker

            但是单节点可以通过相同IP的不同端口号配置多个broker,其实就是伪集群

            应用中broker的数量最好大于等于partition数量

    3、主题(Topic

            Kafka 中的消息以主题为单位进行归类,生产者负责将消息发送到特定的主题(发送到 Kafka 集群中的每一条消息都要指定一个主题),而消费者负责订阅主题并进行消费。

            主题是一个逻辑上的概念,它还可以细分为多个分区,

    4、分区(Partition)

            一个分区只属于单个主题,很多时候也会把分区称为主题分区(Topic-Partition)。同一主题下的不同分区包含的消息是不同的,分区在存储层面可以看作一个可追加的日志(Log)文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(offset)。

    offset 是消息在分区中的唯一标识,Kafka 通过它来保证消息在分区内的顺序性,不过 offset 并不跨越分区,也就是说,Kafka 保证的是分区有序而不是主题有序

    5、副本(replica)   ---AR  ----ISR  ----OSR

    Kafka 为分区引入了多副本(Replica)机制,通过增加副本数量可以提升容灾能力。

    同一分区的不同副本中保存的是相同的消息(在同一时刻,副本之间并非完全一样),副本之间是“一主多从”的关系,其中 leader 副本负责处理读写请求,follower 副本只负责与 leader 副本的消息同步。副本处于不同的 broker 中,当 leader 副本出现故障时,从 follower 副本中重新选举新的 leader 副本对外提供服务。Kafka 通过多副本机制实现了故障的自动转移,当 Kafka 集群中某个 broker 失效时仍然能保证服务可用。

    ISR

    Kafka 为每个主题维护了一组同步副本集合in-sync replicas(其中包含 leader 副本)。
    只有被 ISR 中的所有副本都接收到的那部分生产者写入的消息才对消费者可见,这意味着 ISR 中的所有副本都会与 leader 保持同步状态。
    为了避免出现新 leader 数据不完整导致分区数据丢失的情况,只有 ISR 中 follower 副本才有资格被选举为 leader。
     

    OSR

    与leader副本同步滞后过多的副本(不包括leader副本)组成OSR(Out-of-Sync Replicas)

    6、leader  follower

    以下三张图皆体现的多分区多副本的leader\follower

    生产者和消费者只与 leader 副本进行交互,而 follower 副本只负责消息的同步,很多时候 follower 副本中的消息相对 leader 副本而言会有一定的滞后。

    7、消费者组

    组内的消费者共享一个topic

    组内一个消费者、消息多分区:一个消费者一起消费当前topic的所有分区

    组内多个消费者、消息多分区:多个消费者一起消费当前topic的所有分区(根据分配原则)

    组内多个消费者、消息单分区:多个消费者一起消费当前topic的所有消息

    组内一个消费者、消息单分区:一个消费者消费当前topic的所有消息、并且永远有序

  • 相关阅读:
    Web自动化测试进阶:网页中难点之等待机制 —— 强制等待,隐式等待
    qt wsdl 接口调用(gsoap)
    Docker实战教程 第1章 Linux快速入门
    (4E)-TCO-PEG4-acid,1802913-21-8物理性质分享
    【C语言库函数模拟实现 】# Strlen()
    求二叉树中指定节点所在的层数(可运行)
    服务器往客户端发送字符串的网络编程
    思科、华为、华三、锐捷网络设备巡检命令
    Ubuntu虚拟机部署OpenStack
    mybatisPlus
  • 原文地址:https://blog.csdn.net/u010763324/article/details/126683348