基于Kafka的订阅推送

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分配的负载均衡作用。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180313G1QPJR00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券