kafka的概述

1、定义

kafka是一个分布式的基于发布/订阅模式消息队列的流平台,主要应用于大数据实时处理领域.
这是提取重点关键词:分布式发布/订阅模式消息队列

1.1、消息队列

为什么需要消息队列
举个简单的例子,你在前几天在网上购买了商品,几天后到时候货到了,但是你现在正在上班,小哥打电话叫你来拿快递,可以你得晚上下班才有时间去拿,这时快递小哥也有许多快递需要送,而且等到晚上小哥也下班了,两个人都在僵持,这时小哥把快递放在你住的地方的楼下的便利店,你下班就可以去拿去了,两人皆大欢喜!,所以为什么需要消息队列呢,不用消息队列就必须两个人同时在线,这是的便利店出现完美解决双方有一方不在线的尴尬情况,这里的便利店相等于消息队列中间插件,说了这么多,还是来张图比较简单明了
没有便利店的情况下:
在这里插入图片描述
有便利店的情况:
在这里插入图片描述
好处:

1) 解耦

在没有便利店时快递小哥哥需要送货,完全需要取决于收货人员,哪个时间有空,完成依赖收货人员,出现便利店,快递小哥只需要把快递放置 在便利店即可,不在依赖于收货人实现解耦

2)异步

在没有便利店时,快递小哥哥需要等待你到来取快递,在这等待时间无法做其他的事情,在有便利店后直接把快递放置在便利店,可以干其他的事情,提高效率

3)削峰

比如你购买了许多商品,这是同时到了,如果没有使用便利店(消息队列中间件)这时你需要去各个快递小哥说的地方去拿快递,有了中间插件后,只需要放在便利店(中间插件中),你就可以慢慢有时间去拿去

1.2、发布/订阅模式

消息队列通信的模式: 有两种模式,点对点模式发布订阅模式

1.2.1、点对点模式

一对一消费者主动拉取数据,消息收到后消息清除
消息生产者把消息发送到队列中,然后消息消费者从队列中拉取数据并消费消息,消息被消费后,消息在队列中销毁,不再在队列中存储,队列Queue可以一对多,但是消息只有一个消费者消费,并且消费完消息在队列Queue中删除
在这里插入图片描述

点对点模式的优点:消费者可以拉取消息的频率由自己控制,但是队列中是否有消息需要消费消费者不知道,所以消费者端需要额外的线程去监控

1.2.2、发布订阅模式

一对多:消费者消费数据后不会清除消息
消息生产者发布信息到 topic中(消息队列),同时有多个消息消费者订阅该消息。
发布/订阅模式:有两种模式

第一种

第一种是生产者将消息放入队列后,队列会将信息推送给订阅过该类信息的消费者(类似于微信公众号推送文章)

缺点:由于消费者被动接收推送,所以无需感知消息队列是否有待消费消息,但是consumer1、consumer2、consumer3的处理能力不同,但是消息队列无法感知消费者的处理的速度
比如推送的速度是100M/s、consumer1的处理速度是50M/s、consumer2的处理速度是100M/s、consumer3的速度是150M/s,这是consumer1无法承受,consumer3则出现资源浪费.

第二种

第二种:是生产者将消息放入队列后,订阅该消息的消费者主动拉取消息
在这里插入图片描述
缺点:订阅消息的消费者无法感知消息队列是否有需要消费的信息,即使消息队列中没有消费信息,也需要拉取去感知是否有需要消费的信息(kafka就是这种模式)
讲了如此多,主角kafka才登场kafka是一种高吞吐量的分布式订阅消息系统

2、Kafka 基础架构

话不多说,先看图
在这里插入图片描述
这张图看得很懵逼呀
Producer:Producer即生产者,消息的产生者,是消息的入口。

kafka cluster:Broker:Broker是kafka实例,每个服务器上有一个或多个kafka的实例,我们姑且认为每个broker对应一台服务器。每个kafka集群内的broker都有一个不重复的编号,如图中的broker-0、broker-1等……

Topic:消息的主题,可以理解为消息的分类,kafka的数据就保存在topic。在每个broker上都可以创建多个topic。

Partition:Topic的分区,每个topic可以有多个分区,分区的作用是做负载,提高kafka的吞吐量。同一个topic在不同的分区的数据是不重复的,partition的表现形式就是一个一个的文件夹!

Replication:每一个分区都有多个副本,副本的作用是做备胎。当主分区(Leader)故障的时候会选择一个备胎(Follower)上位,成为Leader。在kafka中默认副本的最大数量是10个,且副本的数量不能大于Broker的数量,follower和leader绝对是在不同的机器,同一机器对同一个分区也只可能存放一个副本(包括自己)。

Message:每一条发送的消息主体。

Consumer:消费者,即消息的消费方,是消息的出口。

Consumer Group:我们可以将多个消费组组成一个消费者组,在kafka的设计中同一个分区的数据只能被消费者组中的某一个消费者消费。同一个消费者组的消费者可以消费同一个topic的不同分区的数据,这也是为了提高kafka的吞吐量!

Zookeeper:kafka集群依赖zookeeper来保存集群的的元信息,来保证系统的可用性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值