文章更新时间:2021/10/28
一、简介
定义:kafka是一个支持分区、多副本、基于zookeeper协调的分布式消息系统,用scala语言编写。
目的:解耦、削峰、异步、缓冲(生产大于消费的情况)详见这里~
使用场景:日志收集、消息系统、用户活动跟踪、运营指标分析等。
PS:消息队列中的消息不是永久存的,会定时删除,自动删除的时间可以配置。
结构:
二、消息队列通信的模式
最大的特性就是可以实时的处理大量数据以满足各种需求场景。
pull拉取模式【kafka默认】
基于拉取或者轮询的消息传送模型。生产者将消息放入消息队列后,由消费者主动的去拉取消息进行消费。
优点:拉取消息的频率可以由自己控制。
存在缺陷:消费者端无法感知消息队列是否有消息需要消费,所以在消费者端需要额外的线程去监控。
push推送模式
基于消息推送的模型,生产者将消息放入消息队列后,队列会将消息推送给订阅过该类消息的消费者(类似微信公众号)。
由于是消费者被动接收推送,所以无需感知消息队列是否有待消费的消息!但是consumer1、consumer2、consumer3由于机器性能不一样,所以处理消息的能力也会不一样,而消息队列却无法感知消费者消费的速度!所以推送的速度成了发布订阅模模式的一个问题!
假设三个消费者处理速度分别是8M/s、5M/s、2M/s,如果队列推送的速度为5M/s,则consumer3无法承受!如果队列推送的速度为2M/s,则consumer1、consumer2会出现资源的极大浪费!
优点:消费者无需感知消息队列是否有待消费的消息。
存在缺陷:生产者无法感知消费者机器的性能,容易造成接收溢出或主机资源浪费。
三、kafka相关名词
- PS:Kafka借鉴了JMS规范的思想,但是却并没有完全遵循JMS规范。
- PS:Kafka中没有队列的概念,Topic可以看成是队列在kafka中的一种表现形式。