分布式消息系统Kafka初步

Kafka是分布式消息系统,在实际应用中被大量的用于日志系统。kafka官网上对kafka的定义叫:A distributed publish-subscribe messaging system。publish-subscribe是发布和订阅的意思,所以更准确的说kafka是一个消息订阅和发布的系统。我们将消息的发布(publish)暂时称作producer,将消息的订阅(subscribe)表述为consumer,将中间的存储阵列称作broker,这样我们就可以大致描绘出这样一个场面:

分布式消息系统Kafka初步_第1张图片

生产者(蓝色,蓝领么,总是辛苦点儿)将数据生产出来,丢给broker进行存储,消费者需要消费数据了,就从broker中去拿出数据来,然后完成一系列对数据的处理。

乍一看这也太简单了,不是说了它是分布式么,难道把producerbrokerconsumer放在三台不同的机器上就算是分布式了么。我们看kafka官方给出的图:

分布式消息系统Kafka初步_第2张图片

多个broker协同合作,producerconsumer部署在各个业务逻辑中被频繁的调用,三者通过zookeeper管理协调请求和转发。这样一个高性能的分布式消息发布与订阅系统就完成了。图上有个细节需要注意,producerbroker的过程是push,也就是有数据就推送到broker,而consumerbroker的过程是pull,是通过consumer主动去拉数据的,而不是broker把数据主动发送到consumer端的。

producer、consumer、broker以及zookeeper这四者的关系:

分布式消息系统Kafka初步_第3张图片

我们看上面的图,我们把broker的数量减少,只有一台。现在假设我们按照上图进行部署:

l  Server-1 broker其实就是kafkaserver,因为producerconsumer都要去连它。Broker主要还是做存储用。

l  Server-2zookeeperserver端,zookeeper的具体作用你可以去官网查,在这里你可以先想象,它维持了一张表,记录了各个节点的IP、端口等信息(以后还会讲到,它里面还存了kafka的相关信息)。

l  Server-345他们的共同之处就是都配置了zkClient,更明确的说,就是运行前必须配置zookeeper的地址,道理也很简单,这之间的连接都是需要zookeeper来进行分发的。

l  Server-1Server-2的关系,他们可以放在一台机器上,也可以分开放,zookeeper也可以配集群。目的是防止某一台挂了。

简单说下整个系统运行的顺序:

1.         启动zookeeperserver

2.         启动kafkaserver

3.         Producer如果生产了数据,会先通过zookeeper找到broker,然后将数据存放进broker

4.         Consumer如果要消费数据,会先通过zookeeper找对应的broker,然后消费。



你可能感兴趣的:(分布式消息系统Kafka初步)