美文网首页
kafka-Zookeeper

kafka-Zookeeper

作者: wisdom2018 | 来源:发表于2019-11-26 10:33 被阅读0次

    1.kafka总体架构


    kafka总体架构.png

    一个典型的kafka体系架构包含:
    1)若干个Producer(消息生产者)
    2)若干个Broker (作为kafka节点的服务器)
    3)若干个Consumer (Group)
    4)一个Zookeeper集群
    kafka通过Zookeeper管理集群配置、选举leader以及在consumer group发生变化时进行Rebalance(消费者的负载均衡)

    2.kafka的broker节点


    image.png

    Kafka 中涉及的术语
    1)Producer :生产者,即消息的发送者,push消息到kafka集群中的broker
    2)Broker:kafka集群由多个kafka实例(server)组成,每个实例构成一个broker,说白了就是服务器
    3)Topic:producer向kafka集群push的消息会被归为某一类别,即Topic,这本质上只是一个逻辑概念,面向的对象是Producer和consumer,Producer只需要关注将消息push到哪一个topic中,而consumer只需要关注自己订阅了哪个topic
    4)Partition:每一个Topic又被分为多个Partitions,即物理分区;出于负载均衡的考虑,同一个Topic的partitions分别存储于Kafka机制中的replicas来设置备份的数量
    5)Consumer:消费者,从Kafka集群的broker中pull消息、消费消息
    6)Consumer Group: high-level consumer API中,每个consumer都属于一个consumer-group;每条消息只能被consumer-group中的一个Consumer消费,但可以被多个consumer-group消费
    7)replicas:partition的副本,保障partition的高可用
    8)leader:replicas中的一个角色,Producer和consumer只跟leader交互
    9)follower:replicas中的一个角色,从leader中复制数据,作为副本,一旦leader挂掉,会从它的follows中选举出一个leader继续提供服务
    10)controller,kafka集群中的一个服务器,用来进行leader election以及各种failover
    11)Zookeeper:kafka通过Zookeeper来存储集群的meta信息

    Topic & Partition
    一个topic可以认为是一类消息,每个topic将被分为多个partition


    image.png

    HW&ISR


    image.png

    目前,有两个地方会对Zookeeper的节点进行维护
    1.Controller来维护,kafka集群中的其中一个Broker会被选举为Controller,主要负责Partition管理和副本

    kafka架构中Zookeeper以怎样的形式存在
    1).Broker在Zookeeper中注册
    2).Topic在Zookeeper中的注册
    数据的一致性,基于Zookeeper,kafka为每一个partition找一个节点作为leader,其余备份为follower;producer push 的消息写入partition (分区)时,作为leader的broker(kafka节点)会将消息写入自己的分区,同时还会将此消息复制到各个follower,实现同步。如果某个follow挂掉,leader会再找一个替代并同步消息;如果leader挂了,follower们会选举出一个新的leader替代,继续业务,这些都是由Zookeeper完成的。

    2.借助Zookeeper实现负载均衡
    Consumer会注册监听事件,当消费者发生变化时,同一group的其余消费者会得到通知。当然,消费者还要监听broker列表的变化

    3.记录Partition与Consumer的关系
    consumer group下有多个consumer(消费者),对于每一个消费者组(Consumer group),kafka都会为其分配一个全局唯一的group ID,group内部的所有消费者共享该ID,订阅的topic下的每个分区只能分配给某个group下的一个consumer(当然该分区还可以分给其他Group)

    4.全程解析(Producer-kafka-consumer)
    4.1 producer发布消息
    producer采用push模式将消息发布到broker,每条消息都会被append到partition中,属于顺序写磁盘。producer发送消息到broker时,会根据分区算法选择将其存储到哪一个partition。

    其路由机制为:
    1).指定了partition,则直接使用
    2).未指定parttition,但指定key,通过key进行hash选出一个partition
    3).partition和key都未指定,使用轮询选出一个partition

    写入流程:
    1).producer先从Zookeeper的"/brokers/.../state"节点找到该parttion的leader
    2).producer将消息发送给该leader
    3).leader将消息写入本地log
    4).followers从leader pull消息,写入本地log后leader发送ACK
    5).leader收到所有的ISR中的replica的ACK后,增加HW(high watermark),最后commit 的offset,并向producer发送ACK。

    相关文章

      网友评论

          本文标题:kafka-Zookeeper

          本文链接:https://www.haomeiwen.com/subject/eshewctx.html