kafka简介和术语

1 kafka介绍

Kafka是一款性能非常好的并且支持分布式的消息队列中间件
由于它的高吞吐特性,Kafka通常使用在大数据领域,如日志收集平台
Kafka是一个流处理平台,因为它在工作中就像是一个可以支撑高吞吐量的管道,数据像水一样流进去,然后另外一端再去读取这些数据
我们就可以把Kafka看作是一种特殊的消息队列中间件

kafka优点:

它被设计为一个分布式系统,易于向外扩展;
它同时为发布和订阅提供高吞吐量;
它支持多订阅者,当失败时能自动平衡消费者;
它将消息持久化到磁盘,因此可用于批量消费,例如ETL,以及实时应用程序

2 术语

Broker            
Kafka集群包含一个或多个服务器,每个服务器被称为broker,保存在zookeeper临时节点/brokers/ids下

Topic 每条发布到Kafka集群的消息都有一个分类,这个类别被称为Topic(主题),保存在zookeeper临时节点
/brokers/topics下
Producer 消息的生产者,负责生产消息并发送到kafka broker
Consumer 消息的消费者,负责从kafka broker拉取数据,并消费已发布的消息,保存在zookeeper临时节点
/consumers下
Partition 每个Topic包含一个或多个Partition,每个partition都是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)
Consumer Group 消费者组,可以给每个Consumer指定消费组,若不指定消费者组,则属于默认的group
Message 消息,通信的基本单位,每个producer可以向一个topic发布一些消息

topic和partition

Kafka中的topic是以partition的形式存放,每个topic包含一个或多个partition
partition的数量一定要大于同时运行的consumer的数量,但要小于等于集群broker的数量,这样消息数据就可以均匀的分布在各个broker中
每个partition在物理上对应一个文件夹,该文件夹下存储这个partition的所有消息和索引文件
每个partition(文件夹)中有多个大小相等的segment(段)数据文件,每个segment的大小是相同的,但是每条消息的大小可能不相同,因此segment<br/>数据文件中消息数量不一定相等
segment数据文件有两个部分组成,分别为index file和data file,此两个文件是一一对应,成对出现,后缀”.index“和“.log”分别表示为segment索引文件和数据文件

3 produce生产写入

Producer采用推(push)模式将消息发送到broker,每条消息都被追加(append)到分区(partition)中,属于顺序写磁盘(顺序写磁盘效率比随机写要高,保障kafka吞吐率,在读取使用的时候读取速度也会更快)
发送消息到broker时,会根据Paritition机制选择将其存储到哪一个Partition
如果Partition机制设置的合理,所有消息都可以均匀分布到不同的Partition里,这样就实现了数据的负载均衡
如果一个Topic对应一个文件,那这个文件所在的机器I/O将会成为这个Topic的性能瓶颈,而有了Partition后,不同的消息可以并行写入不同broker的不同Partition里,极大的提高了吞吐率


流程: producer先从zookeeper的“
/brokers/topics/../partitions/../state”节点找到该partition的leader producer将消息发送给该leader leader将消息写入本地log followers从leader pull消息,写入本地log后向leader发送ACK leader收到所有ISR中的replication的ACK后,增加HW(high watermark,最后commit的offset)并向producer发送ACK

4 consume消费

Kafka发布消息通常有两种模式:队列模式(queuing)和发布/订阅模式(publish-subscribe)
队列模式:只有一个消费组,而这个消费组有多个消费者,一条消息只能被这个消费组中的一个消费者所消费
发布/订阅模式:可有多个消费组,每个消费组只有一个消费者,同一条消息可被多个消费组消费
原文地址:https://www.cnblogs.com/gudanaimei/p/13282677.html