Kafka知识总结(基本介绍+基本概念)

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

消息队列应用场景:

通过异步处理提高系统性能(减少响应所需时间)

削峰/限流

降低系统耦合性

消息队列对比

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文件。

基本概念

主题:

  • Topic主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。

分区:

  • Partition,一个有序不变的消息序列,每个主题下可以有多个分区。

消息位移:

  • Offset,表示分区中每条消息的位置信息,是一个单调递增切不变的值。

副本:

  • Replica,进行数据冗余。

生产者:

  • Producer,向主题发送新消息的应用程序。

消费者:

  • Consumer,从主题订阅新消息的应用程序。

消费者位移:

  • Consumer Offset,表征消费者消费进度。

消费者组:

  • Consumer Group,多个消费者实例共同组成的一个组,同时消费多个分区以实现高吞吐量。

HW

HW (High Watermark)俗称高水位,它标识了一个特定的消息偏移量(offset),消费者只能拉取到这个offset之前的消息。

LEO

LEO (Log End Offset),标识当前日志文件中下一条待写入的消息的offset。

上图中offset为9的位置即为当前日志文件的 LEO,LEO 的大小相当于当前日志分区中最后一条消息的offset值加1。

分区 ISR 集合中的每个副本都会维护自身的 LEO,而 ISR 集合中最小的 LEO 即为分区的 HW,对消费者而言只能消费 HW 之前的消息。

消息模型

相关推荐
斯普信专业组2 小时前
Kafka 消费者 poll() 流程与原理详解
kafka·流程图
迅翼SwiftWing5 小时前
编队系列(二)|固定翼如何依靠邻居信息保持队形?一致性控制、通信拓扑与分布式仿真实现,附仿真代码
分布式
ly76895 小时前
幂等消费者与重试副作用:Kafka 端点接入时的去重边界
分布式·kafka·linq·apache camel·幂等消费者·重试副作用·去重边界
qq_452396235 小时前
第三篇:《从 ZooKeeper 到 KRaft 的迁移实战:前置条件、三阶段流程与回滚策略》
分布式·zookeeper·云原生
真上帝的左手1 天前
30. 技术专题-‌应用框架组件-关系型数据库-MySQL-Mybatis
数据库·分布式·mysql·中间件·mybatis
程序猿乐锅1 天前
万字详解Single-flight(单飞模式)
java·开发语言·分布式·后端·学习·single-flight
sunny06601 天前
推理 INFRA 方法论(2):分布式推理:TP、DP、EP、CP 与 PP 的取舍
人工智能·分布式
字节探索1 天前
Redis 分布式锁:从 SETNX 误删到看门狗自动续期的原理与实践
redis·分布式
9624561 天前
容器 RUNNING,为什么中间件仍不可用?ActiveMQ 与 Kafka/ZooKeeper 恢复实录
中间件·kafka·activemq
真上帝的左手1 天前
30. 技术专题-‌应用框架组件-缓存-Redis
数据库·redis·分布式·缓存·中间件