分布式技术之kafka

kafka是分布式消息发布-订阅消息系统。
是快速、可扩展的;
设计内在是分布式的、分区的、可复制
的提交日志服务;

kafka架构由生产者、消费者、代理(broker)三部分组件构成。生产者将数据推送给代理,消费者从代理拉取数据进行处理,而代理通过zookeeper进行协调和管理。生产者和消费者可根据业务需要自定义开发,多个代理构成分布式消息存储系统,避免数据丢失。代理中的消息被划分为若干个主题(topic),同属于一个主题的所有数据被划分为一个或多个分区,以实现负载分摊和数据并行处理。
分布式技术之kafka

一、代理
启动kafka的一个实例就是一个代理,默认端口是9092。通过zookeeper搭建kafka集群可以启动多个代理同时对外提供服务,代理不保存任何生产者和消费者的状态信息。在实际应用中建议每个代理分布在不同的物理机上。

二、主题
主题是存储在kafka中的相同类型的数据集合名称描述,属于一个主题的所有数据被划分在一个或多个分区上。假设kafka运行了3个代理,某个主题被划分为了3个分区,那么在代理1上,存在分区1(主分区),分区2(副分区),分区3(副);在代理2上…
主分区负责读和写操作,副分区负责从主分区同步数据,当主分区所在代理出现异常时,通过选举机制重新从其他代理机器上选择主分区。如下图所示:
分布式技术之kafka

在实际的应用中建议分区数不应大于代理机器数,分区数大于代理数会造成一个代理上出现多个主分区,一旦代理宕机影响较大

三、分区
一个主题会分成多个分区,相当于把一个数据集合分成多份分别放在不同的分区中存储。在实际应用中,我们知道每个分区都会分成主分区和副分区,为了保障系统的高吞吐率,多个主分区一般会分布在不同的代理上。

四、生产者
使用kafka提供的二次开发包开发的,生产者将数据转化成消息,并通过网络发送给代理。在实际应用中建议生产者采用支持集群技术的框架开发和管理,例如flume

五、消费者
消费者从kafka拉取消息,如果一个主题有多个分区,kafka智能保证一个分区内消息的有序性,在不同分区中无法保证。在实际应用中,注意:对于时序数据而言,如果将某个主题下的数据分成了多个分区,可能会造成读取数据的无序。

六、消费者组
消费者组是消费者的集合。消费者组内的消费者对消息的消费是不会重复的,即同一条消息只能被消费者组内的一个消费者消费。不同消费者组之间的消息消费是重复的。
分布式技术之kafka