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)
队列模式:只有一个消费组,而这个消费组有多个消费者,一条消息只能被这个消费组中的一个消费者所消费
发布/订阅模式:可有多个消费组,每个消费组只有一个消费者,同一条消息可被多个消费组消费