消息中间件
常见的消息中间件有Active MQ , Rabbit MQ ,Rocket MQ, Kafka中,只有Active MQ完全实现了JMS的规范,Kafka则通过消费组和主题分区的方式让发布订阅模型同时也具有了点对点模式的消息收发能力。
一、kafka简介
1、Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写,是一种高吞吐量的分布式发布订阅消息系统。
2、kafka基础架构
简单的说,就是生产者生产消息,kafka集群管理消息,消费者消费消息,zookeeper注册消息
ZooKeeper是一种为分布式应用所设计的高可用、高性能的开源协调服务,提供了分布式锁服务,数据的维护和集群管理机制。
3、kafka名词解释
Producer:Producer即生产者,消息的产生者,生产message发送到topic,是消息的入口。
Consumer:消费者,即消息的消费方,订阅topic并消费message,是消息的出口。
Consumer Group:消费者组,一个Consumer Group包含多个consumer。
Broker:Kafka把服务器的物理机称为 broker(Kafka节点),一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群,Kafka集群能够同时负责多个topic的分发。
Topic:消息的主题,可以理解为消息的分类,每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic,在每个broker上可以创建多个topic。
Message:每一条发送的消息主体。
Partition:Topic物理上的分区,每个topic可以有多个分区,每个分区是一个有序的队列;分区的作用是做负载,提高kafka的吞吐量。
Segment:partition物理上由多个segment组成,每个Segment存着message信息。
Offset:指每个分区里的消息的唯一编号,并且是从0开始递增的。主题+分区+偏移量,可以唯一定位一条消息。。
Zookeeper(分布式协调中心):kafka集群依赖zookeeper来保存集群的的元信息,来保证系统的可用性。
replication:副本,为保证集群中的某个节点发生故障时,该节点上的partition数据不丢失,且kafka仍然能够继续工作,kafka提供了副本机制,一个topic的每个分区都有若干个副本,副本存在于不同的节点broker上,且副本数小于节点broker的数,一个leader和若干个follower。
leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是leader。
follower:每个分区多个副本中的“从k实时从leader中同步数据,保持和leader数据的同步。leader发生故障时,某个follower会成为新的leader,同一个partition的leader和follower不会存在于同一个Broker。
二、消息队列MQ
- 点对点模式,消息的生产和消费者均只有一个,消息由生产者将消息发送到消息队列(queue)中,然后消息消费者从队列中取出消息进行消费,消息被取出后,queue中不再保存该消息。
- 简单的说就是,生产者发送一条消息到queue,只有一个消费者能收到。
- 发布订阅模式,消息的生产者和消费者可能有多个,使用主题(Topic)来对消息进行分类,生产者将消息发送到主题,多个消费者均可以对这个主题进行消费。类似于对多个消费者做广播。,,
- 简单的说就是,发布者发送到topic的消息,订阅了topic的订阅者才会收到消息。

Kafka可以保证同一个partition分区内的消息顺序,但是无法保证跨分区的消息顺序,如果需要实现全局有序,需要采取一些额外的措施。
enable.auto.commit=false
,关闭自动提交位移,在消息被完整处理之后再手动提交位移
每个 Partition 的文件夹下面会有多组 Segment 文件。
每组 Segment 文件又包含 .index 文件、.log 文件、.timeindex 文件(早期版本中没有)三个文件。
Log 文件就是实际存储 Message 的地方,而 Index 和 Timeindex 文件为索引文件,用于检索消息。
消息主要包含消息体、消息大小、Offset、压缩类型……等等!
我们重点需要知道的是下面三个:
Offset:Offset 是一个占 8byte 的有序 id 号,它可以唯一确定每条消息在 Parition 内的位置!
消息大小:消息大小占用 4byte,用于描述消息的大小。
消息体:消息体存放的是实际的消息数据(被压缩过),占用的空间根据具体的消息而不一样。
11、Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点?
四、连接使用kakfa
1)kafka可视化连接工具:kafkatools
填写集群名称、Zookeeper 域名地址、端口、bootstrap servers进行连接
2)查看kafka中的数据
选择主题进行查看数据,Key和Message是二进制的,不能直观的看到具体的消息信息,需要设置展示格式为string
过滤查询kafka消息:
可以按照Offset(偏移量),Key(消息key),Message(消息主体),Regex(正则表达式)进行单个或者组合查询
五、kafka的优势和劣势
1)优势
- 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒。
- 可扩展性:kafka集群支持热扩展。
- 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失。
- 容错性:允许集群中节点故障(若副本数量为n,则允许n-1个节点故障)。
- 高并发:支持数千个客户端同时读写。
2)劣势
- 系统可用性降低
- 系统复杂度提高
- 消息不一致
- 消息延迟
六、kafka的应用场景
一般应用在大数据日志处理或对实时性(少量延迟),可靠性(少量丢数据)要求稍低的场景使用。
1、日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer。
2、消息系统:即用作消息中间件。解耦生产者和消费者、缓存消息等。
3、用户活动跟踪:kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后消费者通过订阅这些topic来做实时的监控分析,亦可保存到数据库。
4、运营指标:kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。
5、流式处理:自0.10.0.0 版本开始, Kafka 社区推出了一个全新的流式处理组件Kafka Streams 。这标志着Kafka 正式进入流式处理框架俱乐部。相比老牌流式处理框架Apache Storm 、Apache Samza,或是最近风头正劲的Spark Strearming,抑或是Apache Flink, Kafka Streams 的竞争力如何?让我们拭目以待。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?