组件
zookeepers(负责选举,均衡,meta记录,消费记录)
zookeeper在集群中与broker和consumer进行交互,维护数据和集群高可用。
- 记录consumer消费message的位置信息;
- partitions故障时进行Leader Election
- kafka的meta信息在zookeeper如何存储
kafka在zookeeper的结构图如下:
标签:投票 stat version 负载均衡 push ati admin lap 目录结构
搭建一套测试集群,共三个节点,每个节点上面都有procuder/broker/consumer角色。没有WebUI页面,架构如下:
在系统架构中,将消息系统独立可起到架构解耦、易扩展、灵活性强、可恢复、数据冗余、异步通讯等优点。
kafka是分布式消息系统软件,实现了消息发布/订阅功能。还有一些其他的消息队列软件,比如RabbitMQ、Redis、ZeroMQ、ActiveMQ、RocketMQ等。这些消息系统各有优缺点。
kafka的优点如下:
producers是消息来源,提供消息写入接口,与zookeeper来实现数据的写入均衡。具体的写入过程见。
与producers有关的内容有:
producers和borders的数据写入方式是push。
consumers是消息系统的流出接口,多个consumers逻辑上组成consumer Group。CG的目标是实现同一需求的消费吞吐量。
同一个topic的message,只能被同一CG的一个Consumer消费;但可以被不同多个CG消费;
比如上图中,一条message被CG中的的C161消费,或者被C163消费,但不能同时被C161和C163消费。因为同一CG在zk中维护共同维护对一个topic的消费pos。
与consumers相关的内容有:
brokers的物理结构
图片备注:
brokers的存储内容归纳如下:
需要了解
zookeepers(负责选举,均衡,meta记录,消费记录)
zookeeper在集群中与broker和consumer进行交互,维护数据和集群高可用。
kafka在zookeeper的结构图如下:
三级目录是一些组件:
borker数据存储目录:/borker/topics/[topic]/partitions/[partition]/state
state数据结构:
{"controller_epoch":5, ##表示kafka集群中的中央控制器选举次数 "leader":1, ##当前partition的leader所在的borker id "version":1, ##版本编号默认为1 "leader_epoch":6, ##leader选举次数 "isr":[2,1,3] ##当前partition的In-sync replica,副本组的borker id列表 }
borker数据存储示例:
{"version":1, "partitions":{ "45":[2,1,3], "34":[3,2,1], "12":[2,3,1], "8":[1,2,3], "19":[3,1,2], "23":[1,3,2], "4":[3,2,1], "40":[3,2,1], "15":[2,1,3], "11":[1,3,2], "9":[2,1,3], "44":[1,2,3], "33":[2,1,3], "22":[3,2,1], "26":[1,2,3], "37":[3,1,2], "13":[3,1,2], "46":[3,2,1], "24":[2,3,1], "35":[1,3,2], "16":[3,2,1], "5":[1,3,2], "10":[3,2,1], "48":[2,3,1], "21":[2,1,3], "43":[3,1,2], "32":[1,2,3], "49":[3,1,2], "6":[2,3,1], "36":[2,3,1], "1":[3,1,2], "39":[2,1,3], "17":[1,3,2], "25":[3,1,2], "14":[1,2,3], "47":[1,3,2], "31":[3,1,2], "42":[2,3,1], "0":[2,3,1], "20":[1,2,3], "27":[2,1,3], "2":[1,2,3], "38":[1,2,3], "18":[2,3,1], "30":[2,3,1], "7":[3,1,2], "29":[1,3,2], "41":[1,3,2], "3":[2,1,3], "28":[3,2,1] } }
为避免broker挂后造成数据丢失,kafka实现了高可用方式。
在“brokers的物理结构”中,replication有多个follewers,分散于不同的brokers。通过增量日志实现。
partition的log记录是顺序的,通过server.properties中log.retention.hours参数定义日志保留时长,过期则删除。新写入的message append记录在partition中。
为提升效率,
ISR是In-Sync Replicate 记录与Leader保持同步的列表。
判断Replica活着,(1)与zk有心跳通讯;(2)与Leader通讯及时。两者有一不满足,fellower都会从ISR中移除。
一般的leader选举算法,有Majority Vote/Zab/Raft/PacificA。kafka采用的即PacificA,kafka维护多个ISR,但不不像Majorty Vote算法,限制最少的2N+1节点和N+1以上投票。
即使只有1个follewer,也可完成Leader选举。
标签:投票 stat version 负载均衡 push ati admin lap 目录结构
原文地址:http://www.cnblogs.com/wyett/p/7464119.html