简介:Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。——百度百科。
一、拓扑结构:
——图片来源于网络,因结构清晰,所以在此引用
二、基本组成部分以及实现流程
1、Broker:kafka集群中包含一个或多个服务器,这种服务器被称为broker。
2、Topic:每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。可以看成是消息的聚合,一个topic有多个分布在节点上的partition组成。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)。
3、Partition:Partition是物理上的概念,每个Topic包含一个或多个Partition,Kafka的分配单位是Partition。
每一个生产者按照算法把消息发送给不同的partition,每一个partition新增消息都会分配一个offset,它是该消息在分区中的唯一标准,kafka通过offset维护消息顺序,在同一分区中消息是有顺序的。每一个partition只允许一个consumer消费,一个consumer可以消费多个partition。(消息消费的时候,首先要知道去哪消费,这就是路由,消费完之后,要记录消费单哪,就是 Offset。)
4、Producer:生产者,负责把消息发布到Broker上。Producer创建一条记录,记录中要指定对应的Topic和Partition、Key和Value;
Producer发布消息流程:
①写入流程图
——图片来源网络。
1.broker state :producer 先从 zookeeper 的 "/brokers/.../state" 节点找到该partition的leader(具体的leader选举请参看其他文章)
2.write log :将消息写入到本地log
3.ACK :消息应答机制(Message acknowledgment,具体原理请参看其他文章)
②写入方式:
Producer通过push将消息发布到Broker,每条信息都append到Partition中,保证高效。
5、Consumer:消费者,向Kafka broker读取消息的客户端。
订阅 Topic 是以一个消费组(consumer group)来订阅的,一个消费组里面可以有多个消费者。同一个消费组中的两个消费者,不会同时消费一个 Partition。
换句话来说,就是一个 Partition,只能被消费组里的一个消费者消费,但是可以同时被多个消费组消费。
因此,如果消费组内的消费者如果比 Partition 多的话,那么就会有个别消费者一直空闲。
——图片来自网络。(https://blog.csdn.net/YChenFeng/article/details/74980531)
关于更详尽的Kafka知识可以参考以下博文:
1、《震惊了,原来这才是Kafka的“真面目”!》https://www.jianshu.com/p/d3e963ff8b70
2、《RabbitMQ消息应答------ack机制》https://blog.csdn.net/a491857321/article/details/50670238
3、《kafka原理深入研究——转》https://www.cnblogs.com/xifenglou/p/7251112.html
4、《Zookeeper 在 Kafka 中的作用》https://www.jianshu.com/p/a036405f989c