Kafka定义
传统定义:是一个分步式
基于发布/订阅模式
的消息队列(Message Queue),主要应用大数据实时处理领域。
发布/订阅:消息的发布者不会直接发送给特定的订阅者,而是将发布的消息分为不同的类别
,订阅者只接受感兴趣的消息
Kafka最 新定义 :Kafka是 一个开源的分布式事件流平台
(Event Streaming Platform),被数千家公司用于高性能数据管道
、流分析
、数据集成
和关键任务应用
。
传统消息队列的应用场景
缓冲,削峰,解耦,异步通信
缓冲/削峰
能解决生产消息和消费消息的处理速度不一致的情况下。
比如Flume采集日志 速度能达到200MB/S 而 Hadoop 上传的速度是100MB/S 生产消息的和消费消息速度不一致,这时候就需要Kafka进行 缓冲/削峰
解耦
能降低生产者和消费者之间的依赖程度
比如数据源有MySQL,有Flume等等,目的地有Hadoop,Spark,Flink等等,将MySQL和Flume比喻成厂家,目的地比喻成消费者,消费者买货不再去厂家订货,而是去零售店去买货,Kafka充当了零售店的作用。厂家将商品放入了零售点,消费者去零售店开始购物。
异步通信
允许用户将消息放入队列中,但并不立即处理它,只是在需要的时候再去处理他们。
比如打电话和发微信,打电话是一定要求对方收到信息,从而进行消息传递。
发微信只需要将想说话的话发给对方,至于对方能不能收到,就是另外一回事了,因为你的任务已经完成了,想发的消息也已经发出去了。
消息队列的两种模式
点对点模式
消费者主动拉取数据,消息收到之后清除消息
生产者会把数据一批一批发送到消息队列的内部,消费者主动拉起消费数据,消费完数据之后,会给一个应答信号,告诉队列我收到了这个数据,那么收到了数据之后,就会将这写数据删掉。
发布/订阅模式
可以有多个Topic (主题)比如,浏览,点赞收藏,评论,都可以创建不同类型的主题,方便后续订阅者进行一个订阅
每个消费者消费后不删除数据
每个消费者互相独立,都可以消费到数据
通常情况下 , 都用 发布 / 订阅模式
Kafka基础架构
(1)Producer:消息生产者,就是向 Kafka broker 发消息的客户端。
(2)Consumer:消息消费者,向 Kafka broker 取消息的客户端。
(3)Consumer Group(CG):消费者组,由多个 consumer 组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。
(4)Broker:一台 Kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个broker 可以容纳多个 topic。
(5)Topic:可以理解为一个队列,生产者和消费者面向的都是一个 topic。
(6)Partition:为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上,一个 topic可以分为多个partition,每个 partition 是一个有序的队列。
(7)Replica:副本。一个 topic 的每个分区都有若干个副本,一个 Leader 和若干个Follower。
(8)Leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是 Leader。
(9)Follower:每个分区多个副本中的“从”,实时从 Leader 中同步数据,保持和Leader 数据的同步。Leader 发生故障时,某个 Follower 会成为新的 Leader。
1.为方便扩展,并提高吞吐量,一个topic分为多个partition
2.配合分区的设计,提出消费者组的概念,组内每个消费者并行消费
3.为提高可用性,为每个partition增加若干副本,类似NameNode HA
4.ZK中记录谁是leader,Kafka2.8.0以后也可以配置不采用ZK
注意:某一个分区中,数据只能由一个消费者进行消费,如果两个消费者消费同一数据在这里,不知道谁消费哪一条了,数据容易混乱.