• Kafka与Zookeeper关系


    1.kafka为什么用到zookeeper
    (1)Kafka集群通过Zookeeper来管理kafka的配置,选举leader;
    (2)在Consumer Group发生变化时进行rebalance
    (3)所有的topic与broker的对应关系都由zk维护
    2.kafka的哪些组件需要注册到zookeeper
    (1)Broker注册到zk
    (2)Topic注册到zk
    (3)Consumer注册到zk
    producer(生产者)不注册到zookeeper是因为生产者的状态是瞬间状态,发送完消息就可以宕机了。
    3.kafka和zookeeper的理解
    kafka使用zookeeper来实现动态的集群扩展,不需要更改客户端(producer和consumer)的配置。broker会在zookeeper注册并保持相关的元数据(topic,partition信息等)更新。
    但是发送给Topic本身的数据是不会发到Zk上的。

    broker: 每个正在运行的kafka节点,部署kafka的服务器, 以broker.id来区分
    producer:消息生产者
    consumer:消息的消费者
    consumer group:消费者组,同一个消费者组只能有一个consumer能消费消息
    topic:主题, 主题中的每条消息包括key-value和timestamp。可以定义多个topic,每个topic又可以划分为多个分区
    partition:topic下的消息分区,通过key取哈希后把消息映射分发到一个指定的分区,每个分区都映射到broker上的一个目录。一般每个分区存储在一个broker上
    replica:副本, 每个分区按照生产者的消息达到顺序存放。每个分区副本都有一个leader
    leader replica:leader角色的分区副本,leader角色的分区处理消息的读写请求. Leader和follower位于不同的broker.
    follower replica:follower角色的分区副本,负责从Leader拉取数据到本地,实现分区副本的创建

    zookeeper主要负责协调管理并保存 Kafka 集群的所有元数据信息,比如集群都有哪些 Broker 在运行、创建了哪些 Topic,每个 Topic 都有多少分区以及这些分区的 Leader 副本都在哪些机器上等信息。
    如下:
    [cluster, controller_epoch, controller, brokers, zookeeper, admin, isr_change_notification, consumers, latest_producer_id_block, config]
    其中,除了zookeeper,其余节点都和kafka有关
    brokers 存放创建的主题和broker的id

    如下:
    [zk: localhost:2181(CONNECTED) 28] ls /brokers
    [ids, topics, seqid]
    topic 存放Controller的信息 controller_epoch:controller选举次数 leader_epoch:leader副本选举次数
    [zk: localhost:2181(CONNECTED) 20] get /brokers/topics/t1/partitions/1/state
    {"controller_epoch":13,"leader":1,"version":1,"leader_epoch":21,"isr":[2,3,1]}
    [zk: localhost:2181(CONNECTED) 21] get /brokers/topics/t1/partitions/0/state
    {"controller_epoch":13,"leader":3,"version":1,"leader_epoch":16,"isr":[2,3,1]}
    [zk: localhost:2181(CONNECTED) 29] ls /brokers/ids
    [1, 2, 3]
    [zk: localhost:2181(CONNECTED) 30] ls /brokers/topics
    [t1]
    其中,Kafka存放id的文件是:/opt/module/kafka-2.11/datas/meta.properties
    内容:broker.id=1
    controller 存放的是kafka集群的master
    如下:
    [zk: localhost:2181(CONNECTED) 8] get /controller
    {"version":1,"brokerid":1,"timestamp":"1606979310534"}
    cZxid = 0x50000006e
    ctime = Thu Dec 03 15:08:30 CST 2020
    mZxid = 0x50000006e
    mtime = Thu Dec 03 15:08:30 CST 2020
    pZxid = 0x50000006e
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x100009e9e9a0007
    dataLength = 54
    numChildren = 0
    consumers 存放消费者组的相关信息
    如下:
    [zk: localhost:2181(CONNECTED) 22] ls /consumers
    [console-consumer-37119] --> 消费者组
    [zk: localhost:2181(CONNECTED) 24] ls /consumers/console-consumer-37119
    [ids, owners, offsets]
    [zk: localhost:2181(CONNECTED) 25] ls /consumers/console-consumer-37119/offsets
    [t1] --> 主题
    [zk: localhost:2181(CONNECTED) 26] ls /consumers/console-consumer-37119/offsets/t1
    [0, 1] --> 分区
    [zk: localhost:2181(CONNECTED) 27] get /consumers/console-consumer-37119/offsets/t1/0
    40 --> 消费者偏移量
    cZxid = 0x500000047
    ctime = Thu Dec 03 14:18:52 CST 2020
    mZxid = 0x500000078
    mtime = Thu Dec 03 16:10:51 CST 2020
    pZxid = 0x500000047
    cversion = 0
    dataVersion = 9
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 2
    numChildren = 0
    如果要格式化zookeeper和kafka:
    删除kafka的logs文件
    删除zookeeper的:/opt/module/zookeeper-3.4.14/zkData/version-2 文件

  • 相关阅读:
    JavaScript中的String对象
    JavaScript中String对象处理HTML标记中文本的方法
    JavaScript中的Array对象
    JavaScript对象基础知识
    开机后显示显示‘无信号’
    JavsScript的基本特点
    ASP.NET中默认的一级目录
    MVC每层的职责
    PHP sql注入漏洞修复(数字型)
    python self的含义
  • 原文地址:https://www.cnblogs.com/zhangkaimin/p/15895124.html
Copyright © 2020-2023  润新知