KAFKA基础知识!
KAFKA基础知识!
月伴飞鱼消息队列应用场景:
通过异步处理提高系统性能(减少响应所需时间)
削峰/限流
降低系统耦合性
消息队列对比
Kafka:
- 追求高吞吐量,一开始用于日志收集和传输,适合产生大量数据的互联网服务的数据收集业务,大型公司可以选用。
- 如果有日志采集功能,肯定首选 Kafka。
RocketMQ:
- 天生为金融互联网领域而生,对于可靠性要求很高的场景。
- 尤其是电商里面的订单扣款,以及业务削峰,在大量交易涌入时,后端可能无法及时处理的情况。
- RoketMQ 在稳定性上可能更值得信赖。
- 这些业务场景在阿里双 11 已经经历了多次考验,如果业务有上述并发场景,建议选择 RocketMQ。
RabbitMQ:
- 结合 Erlang 语言本身的并发优势,性能较好,社区活跃度也比较高,但是不利于做二次开发和维护。
- 不过 RabbitMQ 的社区十分活跃,可以解决开发过程中遇到的 Bug。
- 如果数据量没有那么大,小公司优先选择功能比较完备的 RabbitMQ。
版本号
版本命名:Scala 2.11 - kafka_2.11-2.1.1
前面的版本号是编译 Kafka 源代码的 Scala 编译器版本。Kafka 服务器端的代码完全由 Scala 语言编写,Scala 同时支持面向对象编程和函数式编程。
真正的 Kafka 版本号实际上是 2.1.1。
前面的 2 表示大版本号,即 Major Version;中间的 1 表示小版本号或次版本号,即 Minor Version;最后的 1 表示修订版本号,也就是 Patch 号。
为什么吞吐量大、速度快?
顺序读写:
Kafka的message是不断追加到本地磁盘文件末尾的,而不是随机的写入。
Page Cache:
通过操作系统的Page Cache,Kafka的读写操作基本上是基于内存的,读写速度得到了极大的提升。
零拷贝,批量读写,批量压缩。
分区分段+索引:
Kafka的message是按topic分类存储的,topic中的数据又是按照一个一个的partition即分区存储到不同broker节点。
每个partition对应了操作系统上的一个文件夹,partition实际上又是按照segment分段存储的。
Kafka又默认为分段后的数据文件建立了索引文件,就是文件系统上的
.index
文件。
消息交付可靠性保障
消息交付可靠性保障,是指
Kafka
对Producer
和Consumer
处理的消息提供什么样的承诺。常见的承诺有以下三种:
- 最多一次(
at most once
):
- 消息可能会丢失,但绝不会被重复发送。
- 至少一次(
at least once
):
- 消息不会丢失,但有可能被重复发送。
- 精确一次(
exactly once
):
- 消息不会丢失,也不会被重复发送。
Kafka
默认提供的交付可靠性保障是第二种,即至少一次
。
Kafka
分别通过 幂等性 和 事务 这两种机制实现了 精确一次(exactly once
)语义。