Kafka

1.定义

Kafka:一个分布式基于发布/订阅模式的消息队列。

发布者发布消息进入队列后,每个订阅者都能在一定时间内获取发布的消息(Kafka:消费者通过主动拉取pull队列)。

缺点:即使没有消息,消费者仍然需要轮询消息队列

pull模式:可以根据 Consumer的消费能力以适当的速率消费消息,消费的方式、速率可以由消费者制定。

2.作用

  • 解耦:程序请求结束后可直接返回,无需等待任务执行。 程序与执行独立。
  • 缓冲:解决生产信息与消费信息处理速度不一致的情况
  • 峰值处理能力:应对突发访问量剧增的情况
  • 异步通信

3.Kafka架构

Kafka主要分为生产者、Kafka集群、消费者三大部分。

集群由多个Broker(代理服务器)组成,消息以Topic(主题)为分类,较大的主题可以分为多个Partition(分区)。由于分布式存储的缘故,每个分区都会成为leader/follower的一种,数据只从leader分区进行传输,follower分区仅作为备份。

消费者可以组成消费者组(Consumer group),每一个消费组都能够获得全量的消息,同一个消费者组中只有1个人可以获得相同的消息队列中的消息(提高并发)。一般情况下一个应用对应着一个消费组。

消息队列中的offset(偏移量,记录现在接收到第几条消息了)在0.9版本之前存储在ZK中,在之后存储在Kafka集群中的系统Topic中,因为消费者拉取消息时会频繁的跟ZK进行交互影响效率。

4.存储方式

Kafka的消息数据是存放在于磁盘 上的。因为经过对磁盘读写的一系列优化,磁盘的顺序读取速度>内存随机访问速度

在文件中的实际存储是以Partition作为单位 的,文件夹的命名规则:<topic_name>-<partition_id>

假设我们现在 Kafka 集群只有一个 Broker,我们创建 2 个 Topic 名称分别为:「topic1」和「topic2」,Partition 数量分别为 1、2,那么我们的根目录下就会创建如下三个文件夹:

复制代码
| --topic1-0
| --topic2-0
| --topic2-1

当客户端写入消息时,文件夹下会生成Segment文件(包含log、index两部分),log文件是消息的内容,index是消息的索引。

消息的写入:Partition的写入为尾部追加,这样的顺序写磁盘操作让 Kafka 的效率非常高。

消息的删除:消息被消费后不会立即删除,只会定期删除过期的Segment文件。

5.docker创建集群(kraft版 无zookeeper)

Docker单机部署kafka集群https://www.jianshu.com/p/67a903d6c44c

Docker多机部署kafka集群:https://www.cnblogs.com/linjiangplus/p/16424137.html

未完待续...

参考:

https://zhuanlan.zhihu.com/p/74063251

相关推荐
独行侠影a4 小时前
APScheduler+Redis 分布式定时任务:解决多实例任务重复执行
数据库·redis·分布式
香菜TTT6 小时前
Kafka_深度解析_从架构原理到生产实践
分布式·架构·kafka·linq
zcmodeltech11 小时前
智能矿井沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的感知-传输-控制一体化方案
服务器·数据库·分布式·stm32·单片机·嵌入式硬件
wWYy.13 小时前
基于Raft分布式Kv存储:RPC调用
分布式·rpc
笨蛋不要掉眼泪13 小时前
RabbitMQ消息队列:SpringAMQP
java·分布式·rabbitmq
发量惊人的中年网工13 小时前
SD-WAN如何赋能工业物联网?打造工厂网络远程连接和数据传输新方案
运维·网络·分布式·物联网
java1234_小锋13 小时前
【免费】基于Spark实时金融交易风险监控与预测系统(Java版本+可视化大屏+Kafka+SpringBoot+Vue3) 锋哥原创出品,必属精品
大数据·spark·kafka·金融交易风险监控与预测
段一凡-华北理工大学14 小时前
AI推动工业智能化转型~系列文章05:特征工程:工业 AI 的第一生产力
数据库·人工智能·分布式·搜索引擎·特征工程·高炉智能化
梦想画家14 小时前
FilePulse:Kafka Connect 的“智能文件网关”,重塑数据接入新范式
kafka·文件连接器·filepulse
Devin~Y14 小时前
从本地生活电商到 AI RAG:互联网大厂 Java 面试场景完整实战
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag