Kafka作为一个高吞吐量的分布式发布订阅消息系统,可以很高的处理网站中的动作流式数据.个人觉得也类似于一种消息的中间件,可以广泛用于实时消息的处理.
来看看它的构造,kafka是根据Topic进行分类,发送消息方为producer,接受方为consumer,所以它也类似于一种生产者-消费者模型.每个kafka集群可以有多个实例组成,每一个实例也就是所谓的broker。
谈到集群,就不得不说zookeeper了,可以说kafka是依赖于zookeeper的,它是通过zookeeper来实现集群的高可用性和元数据的管理。
可以看下,这里集群有3个节点,我在其中一个节点上创建了一个topic,每个topic有2个分区,topic的副本数量为2(用于集群的高可用和容错机制)。集群上的描述如下:
接下来,看看消息是如何在节点间进行推送的,我在2号节点上产生消息后,3号节点上就已经即刻消费掉,其实这就好比新浪微博等实时消息,当我编辑好一条消息发送后,另外一方好友或者朋友圈可以即刻消费.
(2号节点作为生产者)
(3号节点作为消费者)
在正常的生产中,少不了这种场景,就是某个节点挂掉了,那么网络间的通信或者数据传递怎么办?来看看,kafka利用zookeeper来作为容错的机制。
例如,这里2号节点宕掉了(这里直接把该节点的kafka应用进程2876给kill掉);
再来看下,集群中的描述,存活的节点只有1号和3号broker,跟之前的个数不一样.
换言之,当集群中某个broker挂了,zookeeper会选择新的broker提供服务,这里partition 0的2号broker挂掉了,kafka有优先副本的机制,选取了3号节点作为该分区的leader进行服务,达到了leader分配的负载均衡作用。
领取专属 10元无门槛券
私享最新 技术干货