ZooKeeper为kafka做负载均衡
2017-11-22 本文已影响1553人
bobcorbett
消息生产者:producer
消息消费者:consumer
主题:即Topic,由用户定义并配置在Kafka服务端,用于建立生产者和消费者之间的订阅关系:生产者发送消息到指定Topic下,消费者从这个Topic下消费消息。
Broker:即Kafka服务器,用于存储消息,在消息中间件中通常被称为Broker
消费者分组:Group
Offset:消息存储在Kafka的Broker上,消费者拉取消息数据的过程中需要知道消息在文件中的偏移量,这个偏移量就是所谓的Offset
ZooKeeper负责管理所有Broker服务器列表,并且建立了对应路径来对其进行管理/brokers/ids
每个Broker服务器在启动时,都会到ZooKeeper上进行注册,其节点路径为/broker/ids/[0...N]
Topic注册:Kafka当中,会将同一个Topic的消息分成多个区,分布到多个Broker上,这些分区信息和Broker的对应关系由ZooKeeper来维护
ZooKeeper负载均衡实现:
- 每当一个Broker启动时,会首先完成Broker注册过程,在ZooKeeper的节点列表里保存Broker。
- Kafka的生产者会对ZooKeeper上的“Broker的新增与减少”、“Topic的新增和减少”和“Broker和Topic关联关系的变化”等事件注册Watcher监听
- 通过ZooKeeper的Watcher通知能够让生产者动态的获取Broker和Topic的变化情况
- Kafka有消费者分组的概念,每个消费者分组包含了若干个消费者,每一条消息只会发送给分组内的一个消费者,不同消费者分组消费自己特定的Topic下面的消息,互不干扰
- Kafka会为每个消费者分配全局唯一的Consumer ID,采用“Hostname:UUID”形式来表示
- 每个消费者一旦确定了对一个消息分区的消费权利,ZooKeeper会将其Consumer ID写入到对应消息分区的临时节点上
- 消费进度管理:Kafka需要定时地将分区消息的消费进度,即Offset记录到ZooKeeper上去