大数据组件-kafka(基础篇)
- Kafka简介
- Kafka是什么?
- Kafka的应用场景
- Kafka的架构组成
- Kafka的主要竞争力
Kafka简介
Kafka是什么?
Kafka是一个消息队列,存储消息的队列中间件。可以存储消息进队列中,也可以从消息队列中读取消息,遵循先进先出的原则。消息队列一般是作为一个通信的管道,不是一个永久性的存储,是作为临时存储存在的,但是kafka提供了消息持久化的功能,可以作为数据存储系统来使用。Kafka还提供了一些和数据处理相关的组件,比如kafka Stream、kafka connect,具备了实时数据处理的功能。常见的消息队列有:Active MQ,Rabbit MQ等
Kafka的应用场景
主要分为两大类,作为数据管道和实时流应用程序
- 异步处理
以电商服务器为例,原本电商服务器是需要流程结束后才能给用户响应;加入消息队列后,在中途就可以提前给用户响应(本质上没有加快速度,相当于流程没有走完就提前给用户响应,提高用户体验),然后再将需要处理的信息放入消息队列等待处理。本质就是讲耗时的操作放入其他系统中,在该系统前加入消息队列,以在感觉上提升系统响应。 - 系统解耦
原本如果订单系统和库存系统其中某一个出了问题,或者更改了版本,那另一个系统就会跟着出问题,耦合很重。加入消息队列后,两个系统不直接关联,都与消息队列进行交互,一个系统出了问题或者需要更改是不会影响到另一个系统(但是万一消息队列出了事,两个系统都会出事)。本质上是将两个耦合严重的系统通过消息队列连接,以达到解耦的目的。 - 流量削峰
如果直接通过MySQL访问,瞬间爆发的大流量可能直接压垮MySQL,不只是无法处理,还会发生数据库崩溃的情况;加入了消息队列后,由于Kafka的单机吞吐量相比于MySQL高多了,那就可以将消息全部放入消息队列,后续的业务处理程序一个个排序处理,不会出现压垮数据库的情况。和异步处理类似,没有提高效率,所需要的处理时间是一样的,但是不会导致数据库奔溃,可以让处理程序有序处理。本质上是利用消息队列低延迟,高可靠、高吞吐的特点来应对大量并发 - 日志处理
分析和记录用户行为,放进消息队列后就不会丢失,然后由后续的流式处理程序Flink进行处理。本质上是将消息队列作为临时存储和消息传输管道。
Kafka的架构组成
主要基于生产者消费者模型,衍生出了两种模式:
- 点对点模式
多个消息生产者生产消息放入消息队列中,多个消费者从中提取数据进行处理。
有三个特点:
1.每个消息只有一个接收者,一旦被消费,就从消息队列中消失了
2.发送者和接收者没有依赖关系。
3.接收者在成功接收消息后需要向队列应答接收成功,以便消息队列删除当前接收的消息。 - 发布订阅模式
发布订阅模式类似于微信公众号的模式,你需要作为某个消息的订阅者才有权利消费该消息,有三个特点:
1.每个消息可以有多个订阅者
2.发布者和订阅者之间有时间上的依赖性(超过时间无法消费),针对某个主题,必须创建订阅者后才能消费发布者的消息
3.订阅者需要提前订阅,无法消费订阅之前发布的消息
Kafka的主要竞争力