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 文件

posted @ 2022-02-15 09:45  深海蓝精灵  阅读(5438)  评论(0编辑  收藏  举报