Kafka 实战 (1):消息中间件原理与概念

Kafka消息模型与工作原理详解 Kafka作为一个强大的分布式流处理平台,在大数据领域中发挥着重要的作用。它的高吞吐量、可扩展性、持久性等特点,使其能够满足各种复杂的应用场景需求。无论是日志收集、流式处理,还是消息系统和事件驱动架构,Kafka都能提供高效、可靠的解决方案。随着大数据技术的不断发展,Kafka的应用前景也将更加广阔。如果你还没有尝试过Kafka,不妨在自己的项目中使用一下,相信它会给你带来意想不到的惊喜。 阅读详情

2019年8月17日

最近项目使用到中间件,自己以前也对kafka垂涎已久了,故这个周末抽空总结一波。

目录

消息中间件

使用中间件缘由

解耦

异步

削峰

消息中间件kafka

kafka业务场景与概念分析

发送数据

kafka Partition 分配原则

kafka确保消息不丢失性

保存数据:partition结构

保存数据:Message结构

保存数据:存储策略

消费数据

参考文章:


 

消息中间件

Apache Kafka是分布式发布-订阅消息系统,在 kafka官网上对 kafka 的定义:一个分布式发布-订阅消息传递系统。 它最初由LinkedIn公司开发,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。Kafka是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。

开源消息中间件不止kafka一种,如下图:

各消息队列对比,Kafka深度解析,众人推荐,精彩好文: http://blog.youkuaiyun.com/allthesametome/article/details/47362451

 

使用中间件缘由

解耦

快递小哥手上有很多快递需要送,他每次都需要先电话一一确认收货人是否有空、哪个时间段有空,然后再确定好送货的方案。这样完全依赖收货人了!如果快递一多,快递小哥估计得忙疯了……

如果有了便利店,快递小哥只需要将同一个小区的快递放在同一个便利店,然后通知收货人来取货就可以了,这时候快递小哥和收货人就实现了解耦!

异步

快递小哥打电话给我后需要一直在你楼下等着,直到我拿走你的快递他才能去送其他人的。

快递小哥将快递放在小芳便利店后,又可以干其他的活儿去了,不需要等待你到来而一直处于等待状态,提高了工作的效率。

削峰

假设双十一我买了不同店里的各种商品,而恰巧这些店发货的快递都不一样,有中通、圆通、申通、各种通等……更巧的是他们都同时到货了!

中通的小哥打来电话叫我去北门取快递、圆通小哥叫我去南门、申通小哥叫我去东门。我一时手忙脚乱……

我们能看到在系统需要交互的场景中,使用消息队列中间件真的是好处多多,基于这种思路,就有了丰巢、菜鸟驿站等比小芳便利店更专业的“中间件”了。

 

消息中间件kafka

Apache Kafka与传统消息系统相比,有以下不同:

  • 它被设计为一个分布式系统,易于向外扩展;

  • 它同时为发布和订阅提供高吞吐量;

  • 它支持多订阅者,当失败时能自动平衡消费者;

  • 它将消息持久化到磁盘,因此可用于批量消费,例如ETL,以及实时应用程序。

下面主要介绍Apache Kafka的架构、特性和特点,帮助我们理解Kafka为何比传统消息服务更好。

 

kafka业务场景与概念分析

如下是我从“宇道源码”偷来的一张图,大致又细致的描述了kafka的使用场景:

上图的相关概念是:

  • Producer:Producer 即生产者,消息的产生者,是消息的入口。

  • Kafka Cluster:

    Broker: Broker 是 Kafka 实例,每个服务器上有一个或多个 Kafka 的实例,我们姑且认为每个 Broker 对应一台服务器。

    每个 Kafka 集群内的 Broker 都有一个不重复的编号,如图中的 Broker-0、Broker-1 等……

    Topic: 消息的主题,可以理解为消息的分类,Kafka 的数据就保存在 Topic。在每个 Broker 上都可以创建多个 Topic。

    Partition: Topic 的分区,每个 Topic 可以有多个分区,分区的作用是做负载,提高 Kafka 的吞吐量。

    同一个 Topic 在不同的分区的数据是不重复的,Partition 的表现形式就是一个一个的文件夹!

    Replication: 每一个分区都有多个副本,副本的作用是做备胎。当主分区(Leader)故障的时候会选择一个备胎(Follower)上位,成为 Leader。

    在 Kafka 中默认副本的最大数量是 10 个,且副本的数量不能大于 Broker 的数量,Follower 和 Leader 绝对是在不同的机器,同一机器对同一个分区也只可能存放一个副本(包括自己)。

  • Message: 每一条发送的消息主体。

  • Consumer: 消费者,即消息的消费方,是消息的出口。

  • Consumer Group: 我们可以将多个消费组组成一个消费者组,在 Kafka 的设计中同一个分区的数据只能被消费者组中的某一个消费者消费。

    同一个消费者组的消费者可以消费同一个 Topic 的不同分区的数据,这也是为了提高 Kafka 的吞吐量!

  • Zookeeper: Kafka 集群依赖 Zookeeper 来保存集群的的元信息,来保证系统的可用性。

 

发送数据

我们看上面的架构图中,Producer 就是生产者,是数据的入口。注意看图中的红色箭头,Producer 在写入数据的时候永远在找 Leader,不会直接将数据写入 Follower!

那 Leader 怎么找呢?写入的流程又是什么样的呢?我们看下图:

发送的流程就在图中已经说明了,就不单独在文字列出来了!需要注意的一点是,消息写入 Leader 后,Follower 是主动的去 Leader 进行同步的!

Producer 采用 Push 模式将数据发布到 Broker,每条消息追加到分区中,顺序写入磁盘,所以保证同一分区内的数据是有序的!

写入消息到分区的示意图如下:

上面说到数据会写入到不同的分区,那 Kafka 为什么要做分区呢?相信大家应该也能猜到,分区的主要目的是:

  • 方便扩展。 因为一个 Topic 可以有多个 Partition,所以我们可以通过扩展机器去轻松的应对日益增长的数据量。

  • 提高并发。 以 Partition 为读写单位,可以多个消费者同时消费数据,提高了消息的处理效率。

 

kafka Partition 分配原则

熟悉负载均衡的朋友应该知道,当我们向某个服务器发送请求的时候,服务端可能会对请求做一个负载,将流量分发到不同的服务器。那在 Kafka 中,如果某个 Topic 有多个 Partition,Producer 又怎么知道该将数据发往哪个 Partition 呢?

Kafka 中有几个原则:

  • Partition 在写入的时候可以指定需要写入的 Partition,如果有指定,则写入对应的 Partition。

  • 如果没有指定 Partition,但是设置了数据的 Key,则会根据 Key 的值 Hash 出一个 Partition。

  • 如果既没指定 Partition,又没有设置 Key,则会轮询选出一个 Partition。

 

kafka确保消息不丢失性

其实上面的写入流程图中有描述出来,那就是通过 ACK 应答机制!在生产者向队列写入数据的时候可以设置参数来确定是否确认 Kafka 接收到数据,这个参数可设置的值为 0、1、all:

  • 0 代表 Producer 往集群发送数据不需要等到集群的返回,不确保消息发送成功。安全性最低但是效率最高。

  • 1 代表 Producer 往集群发送数据只要 Leader 应答就可以发送下一条,只确保 Leader 发送成功。

  • all 代表 Producer 往集群发送数据需要所有的 Follower 都完成从 Leader 的同步才会发送下一条,确保 Leader 发送成功和所有的副本都完成备份。安全性最高,但是效率最低。

最后要注意的是,如果往不存在的 Topic 写数据,能不能写入成功呢?Kafka 会自动创建 Topic,分区和副本的数量根据默认配置都是 1。

 

保存数据:partition结构

Producer 将数据写入 Kafka 后,集群就需要对数据进行保存了!Kafka 将数据保存在磁盘,可能在我们的一般的认知里,写入磁盘是比较耗时的操作,不适合这种高并发的组件。

Kafka 初始会单独开辟一块磁盘空间,顺序写入数据(效率比随机写入高)。

 

前面说过了每个 Topic 都可以分为一个或多个 Partition,如果你觉得 Topic 比较抽象,那 Partition 就是比较具体的东西了:

  • Partition 在服务器上的表现形式就是一个一个的文件夹,每个 Partition 的文件夹下面会有多组 Segment 文件。
  • 每组 Segment 文件又包含 .index 文件、.log 文件、.timeindex 文件(早期版本中没有)三个文件。
  • Log 文件就是实际存储 Message 的地方,而 Index 和 Timeindex 文件为索引文件,用于检索消息。

如上图,这个 Partition 有三组 Segment 文件,每个 Log 文件的大小是一样的,但是存储的 Message 数量是不一定相等的(每条的 Message 大小不一致)。

文件的命名是以该 Segment 最小 Offset 来命名的,如 000.index 存储 Offset 为 0~368795 的消息,Kafka 就是利用分段+索引的方式来解决查找效率的问题。

 

保存数据:Message结构

上面说到 Log 文件就实际是存储 Message 的地方,我们在 Producer 往 Kafka 写入的也是一条一条的 Message。

那存储在 Log 中的 Message 是什么样子的呢?消息主要包含消息体、消息大小、Offset、压缩类型……等等!

我们重点需要知道的是下面三个:

  • Offset: Offset 是一个占 8byte 的有序 id 号,它可以唯一确定每条消息在 Parition 内的位置!

  • 消息大小: 消息大小占用 4byte,用于描述消息的大小。

  • 消息体: 消息体存放的是实际的消息数据(被压缩过),占用的空间根据具体的消息而不一样。

 

保存数据:存储策略

无论消息是否被消费,Kafka 都会保存所有的消息。那对于旧数据有什么删除策略呢?

  • 基于时间, 默认配置是 168 小时(7 天)。

  • 基于大小, 默认配置是 1073741824。

需要注意的是,Kafka 读取特定消息的时间复杂度是 O(1),所以这里删除过期的文件并不会提高 Kafka 的性能!

 

消费数据

消息存储在 Log 文件后,消费者就可以进行消费了。消费模式比如:点对点模式和发布订阅模式。

1)点对点模式

 

2)发布订阅模式

而Kafka 采用的是点对点的模式,消费者主动的去 Kafka 集群拉取消息,与 Producer 相同的是,消费者在拉取消息的时候也是找 Leader 去拉取。

kafka的consumer消费原则有两个:

  • 多个消费者可以组成一个消费者组(Consumer Group),每个消费者组都有一个组 id!
  • 同一个消费组者的消费者可以消费同一 Topic 下不同分区的数据,但是不会组内多个消费者消费同一分区的数据!

是不是有点绕?我们看下图:

 

图示是消费者组内的消费者小于 Partition 数量的情况,所以会出现某个消费者消费多个 Partition 数据的情况,消费的速度也就不及只处理一个 Partition 的消费者的处理速度!

如果是消费者组的消费者多于 Partition 的数量,那会不会出现多个消费者消费同一个 Partition 的数据呢?

  • 上面已经提到过不会出现这种情况!多出来的消费者不消费任何 Partition 的数据。
  • 所以在实际的应用中,建议消费者组的 Consumer 的数量与 Partition 的数量一致!

在保存数据的小节里面,我们聊到了 Partition 划分为多组 Segment,每个 Segment 又包含 .log、.index、.timeindex 文件,存放的每条 Message 包含 Offset、消息大小、消息体…… 同时,我们多次提到 Segment 和 Offset,查找消息的时候是怎么利用 Segment+Offset 配合查找的呢?

消费实例

假如现在需要查找一个 Offset 为 368801 的 Message 是什么样的过程呢?我们先看看下面的图:

 

  1. 先找到 Offset 的 368801message 所在的 Segment 文件(利用二分法查找),这里找到的就是在第二个 Segment 文件。
  2. 打开找到的 Segment 中的 .index 文件(也就是 368796.index 文件,该文件起始偏移量为 368796+1。我们要查找的 Offset 为 368801 的 Message 在该 Index 内的偏移量为 368796+5=368801,所以这里要查找的相对 Offset 为 5)。由于该文件采用的是稀疏索引的方式存储着相对 Offset 及对应 Message 物理偏移量的关系,所以直接找相对 Offset 为 5 的索引找不到。这里同样利用二分法查找相对 Offset 小于或者等于指定的相对 Offset 的索引条目中最大的那个相对 Offset,所以找到的是相对 Offset 为 4 的这个索引。
  3. 根据找到的相对 Offset 为 4 的索引确定 Message 存储的物理偏移位置为 256。打开数据文件,从位置为 256 的那个地方开始顺序扫描直到找到 Offset 为 368801 的那条 Message。

这套机制是建立在 Offset 为有序的基础上,利用 Segment+有序 Offset+稀疏索引+二分查找+顺序查找等多种手段来高效的查找数据!至此,消费者就能拿到需要处理的数据进行处理了。

那每个消费者又是怎么记录自己消费的位置呢?

在早期的版本中,消费者将消费到的 Offset 维护在 Zookeeper 中,Consumer 每间隔一段时间上报一次,这里容易导致重复消费,且性能不好!在新的版本中消费者消费到的 Offset 已经直接维护在 Kafka 集群的 __consumer_offsets 这个 Topic 中!

 

Kafka消费Offset原理

在通过Client端消费Kafka中的消息时,消费的消息会同时在Zookeeper和Kafka Log中保存,如上图红线所示。

     当手动删除Kafka某一分片上的消息日志时,如上图蓝线所示,此是只是将Kafka Log中的信息清0了,但是Zookeeper中的Partition和Offset数据依然会记录。当重新启动Kafka后,我们会发现如下二种情况:

  •      A、客户端无法正常用消费;
  •      B、在使用Kafka Consumer Offset  Monitor工具进行Kafka监控时会发现Lag(还有多少消息数未读取(Lag=logSize-Offset))为负数;其中此种情况的删除操作需要我们重点关注,后面我们也会详细介绍其对应的操作步骤。

   一般正常情况,如果想让Kafka客户端正常消费,那么需要Zookeeper和Kafka Log中的记录保持如上图黄色所示。

 

参考文章:

https://mp.weixin.qq.com/s/p_T7xCi67KEhtu5-4AwNIw

https://blog.xiaoxiaomo.com/2016/05/14/Kafka-Consumer%E6%B6%88%E8%B4%B9%E8%80%85/

https://www.cnblogs.com/moonandstar08/p/6204581.html

 

芋道源码解析之数据权限 数据权限是一个比较常用的功能,芋道源码通过mybatis-plus自定义插件在SQL执行前拦截并解析到对应的表,根据数据权限规则对这些表追加where条件来实现数据权限控制,对于一些需要单独指定数据权限的业务方法,通过数据权限注解和结合线程上下文对加了注解的方法进行前置和后置的处理,把当前方法适用的数据权限规则传递给数据权限SQL解析器进行额外处理,使得数据权限规则既能全局生效又能局部调整。 阅读详情

相关推荐

消息中间件kafka,rabbitMQ

消息中间件kafka,rabbitMQ

Spring_Lws的博客 1109

《中间件》——kafka的工作原理解析

Kafka的原理浅析

程序大视界 1万+

掌握消息中间件:Kafka实战部署指南

Kafka客户端库是Java应用与Kafka进行交互的核心组件。它负责创建生产者和消费者,并处理网络通信、数据序列化与反序列化等复杂操作。Kafka客户端库在功能上可以分为两部分:生产者库和消费者库,它们分别用于发送消息和接收消息。

weixin_42433737的博客 410

芋道源码(无遮羞布版)Spring Boot 全景指南

芋道源码()项目基于Spring Boot构建,旨在提供一个全面且易于定制的企业级应用框架。│├── gitignore # Git忽略文件配置├── LICENSE # 开源许可协议MIT├── README.md # 项目读我文件,包含项目说明和访问文档方式├── pom.xml # Maven项目的主POM文件,定义依赖和构建设置│├── mysql_script # 数据库初始化脚本│├── yudao-dependencies # Maven依赖版本管理模块。

m0_67393827的博客 2331

芋道源码完善版本(dev、prod)

芋道源码完善版本(dev、prod)

基于Vue3和TypeScript的yudao-ui-admin设计源码

该项目为基于Vue3和TypeScript构建的yudao-ui-admin设计源码,总计包含1594个文件,涵盖704个Vue组件、408个TypeScript类型定义、179个PNG图片、156个SVG图标、68个JPG图片、29个JavaScript文件、10个JSON配置、10个SCSS样式、7个TypeScript脚本、2个Markdown文件。支持的语言包括Vue、TypeScript、JavaScript、CSS、Python、HTML。

消息中间件-Kafka1-实现原理

消息中间件-Kafka1-实现原理

siyueguoji的博客 1468

GPU架构-SIMT

本文深度剖析了GPU的SIMT架构,从硬件实现层面解析其与SIMD的本质差异。SIMT通过将32个线程捆绑为warp执行,在标量编程模型下实现数据并行。文章对比了SIMD和SIMT的执行模型、分支处理机制及存储层次,指出SIMT是对SIMD的虚拟化抽象。重点分析了Volta架构引入的独立线程调度技术,以及访存合并对性能的关键影响。通过定量数据展示了各代GPU架构的寄存器文件规模和线程调度机制,为开发者优化GPU程序提供了硬件层面的理论基础。

技术引领业务创新 973

消息中间件之Kafka

@(A3中间件)[Kafka] Kafka® is used for building real-time data pipelines and streaming apps. It is horizontally scalable, fault-tolerant, wicked fast, and runs in production in thousands of companies. ...

共享开源力量,成就超级个体 2751

基于树莓派5的AR头显开发:从硬件选型到Unity整合全解析

增强现实(AR)技术通过将虚拟信息叠加到真实世界,为用户提供沉浸式交互体验。其核心原理依赖于计算机视觉进行环境感知与空间定位,并结合实时3D渲染实现虚实融合。在工程实践中,嵌入式平台因其低成本、低功耗特性,成为探索AR应用边界的重要载体。本项目以树莓派5为核心,通过集成OpenCV进行ArUco标记识别实现精准空间定位,并利用MediaPipe完成手势交互,最终在Unity引擎中完成虚实场景的实时渲染与融合,为开发者提供了一个完整的、可亲手实践的AR系统开发方案。

weixin_32430941的博客 254

Starlink第三代终端和第二代终端的差异性有哪些?

starlink第三代终端和第二代终端的额差异

chen2jiang3的博客 2924

SpringCloud与Kafka消息中间件集成教程

在集成Spring Cloud与Kafka的过程中,有几个核心概念和步骤是至关重要的。首先,Kafka作为一个分布式消息系统,提供了高吞吐量、低延迟和持久性的消息传递服务。Spring Cloud Stream则为微服务架构提供了一种与消息中间件交互的抽象层,使得服务可以轻松地发送和接收消息,而无需关心底层消息中间件的具体实现。

kkchenjj的博客 1453

UE4 GamePlay框架深度解析:从蓝图到C++构建多人游戏核心

在游戏开发与实时交互应用领域,一套清晰、可扩展的底层框架是项目成功的关键。GamePlay框架作为虚幻引擎(UE4/UE5)的核心架构,定义了游戏世界中对象交互、状态管理与网络同步的基本原理。它通过职责分离的设计模式,将游戏规则(GameMode)、全局状态(GameState)、玩家状态(PlayerState)、可操控实体(Pawn/Character)及其控制器(Controller)等核心类有机组织起来,确保了逻辑的清晰性与多人游戏数据的一致性。其技术价值在于为开发者提供了一套经过验证的最佳实践,大

weixin_33924770的博客 616

kafka 消息中间件原理及实例

Kafka作为一种高性能分布式消息系统,其核心原理包括生产者-消费者模型、分区并行处理和顺序写磁盘机制。通过零拷贝技术和批量压缩实现高吞吐量,支持三种消息传递语义(至多一次/至少一次/精确一次)。实战示例展示了用户行为日志收集系统的搭建过程,涵盖Docker集群部署、Python生产者与Flink消费者代码实现。关键运维配置涉及消息防丢失和吞吐量优化,典型应用场景包括实时流处理、日志聚合等。Kafka生态工具如Kafka Connect和KSQL进一步扩展了其功能边界。2023年趋势显示Kafka正逐步摆脱

小宝哥Code的专栏 1051

使用ADS进行LNA低噪放设计的详细教程

详细介绍了通过ADS软件进行LNA设计的过程,从晶体管的选型到稳定性系数分析、再到输入输出端匹配,完整的讲解了低噪放的设计流程,可以使新手小白以及学习射频放大器的朋友可以快速的了解掌握ADS的使用方法和LNA的设计方法。

weixin_41831333的博客 3448

不用SE63逐个翻译!ABAP函数LXE_OBJ_TEXT_PAIR_WRITE批量处理TCODE描述的3种姿势

本文介绍了三种利用ABAP函数LXE_OBJ_TEXT_PAIR_WRITE批量翻译SAP事务码(TCODE)描述的高效方案,旨在替代SE63逐个翻译的低效操作。内容涵盖从基础循环、Excel导入到全自动程序集成的实现方法,帮助开发者显著提升批量翻译效率,并深入解析了SAP翻译体系的核心原理与实战技巧。

weixin_42593130的博客 659

Kafka - 零基础入门:从概念到实战的完整学习路径

本文是一篇面向零基础开发者的Kafka入门指南,主要内容包括: Kafka的核心概念与应用场景 对比传统同步调用与消息队列的优势 介绍Producer、Consumer、Broker等核心角色 列举日志聚合、订单处理等典型应用场景 本地Kafka集群搭建 使用KRaft模式快速启动单节点集群 通过命令行工具验证集群状态 Java客户端开发 提供Maven依赖配置 演示最简单的Producer发送消息示例 包含异步发送与回调处理 文章采用循序渐进的方式,从基本概念到实践操作,帮助读者快速掌握Kafka的核心功

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

ardupilot 方向余弦矩阵/旋转矩阵的理解

本节主要记录自己对ardupilot中用到的方向余弦矩阵/旋转矩阵的理解,欢迎批评指正,有些资料参考网上写的比较好的资料,免得查找资料麻烦。旋转矩阵的坐标理解:表示从旋转矩阵的下标的坐标系的坐标变换到上标表示的坐标系坐标下。旋转矩阵的坐标系理解:表示从旋转矩阵的上标的坐标系变换到下标表示的坐标系下。从旋转矩阵的投影更好理解,比如下面旋转矩阵的第一行是左边坐标系的第一维分量在右边坐标系的投影。

陌城烟雨 612

Kafka基础—1、Kafka基础概念 & Kafka架构 & Kafka安装与配置

Kafka:什么是Kafka,应用场景,基础概念,Kafka架构,Kafka环境搭建,但节点与多节点集群配置,常见配置参数解释

风不归的乐园 1202

fasterlio原理及代码框架梳理

Faster-LIO 的优势是在保持同等高精度的前提下,显著提升计算效率,以支持更极端的应用场景(如高速无人机)和更廉价的硬件平台。可以把 Faster-LIO 理解为用一把更快的“空间哈希筛子”(iVox)替换了原来精细的“动态平衡树”(ikd-Tree),从而在精度损失极小的情况下,实现了效率的显著提升。:只在实际有地图点的空间区域动态创建和保留体素单元,形成一个稀疏的体素地图。是关键:将去畸变点云中的每个点,在 iVox 维护的局部地图中搜索近邻(如5个最近点),构建点到面的距离残差。

Studying…… 246

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

消息中间件深度剖析:以 RabbitMQ 和 Kafka 为核心

本文将深入探讨消息中间件的概念、RabbitMQ 和 Kafka 的工作原理、它们的优缺点、适用场景,以及如何在实际项目中选择和应用它们。

weixin_73144915的博客 1714

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

消息中间件-kafka概念|使用|总结

讲一讲分布式消息中间件 目录 讲一讲分布式消息中间件 答案关键字 Kafka 基本概念和架构 问题 zookeeper 答案关键字 Kafka 使用 问题 命令行工具 Kafka Producer Kafka Consumer 答案关键字 高可用和性能 问题 分区与副本 性能优化 答案关键字 什么是分布式消息中间件? 消息中间件的作用是什么? 消息中间件的使用场景是什么? 消息中间件选型? 消息队列 分布式消息是一种通信.

shining曙光的博客 451

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

消息中间件原理概念篇

一、消息中间件相关知识 1、概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发RocketMQ等。 2、消息中间件的组成 2.1 Broker 消息服务器...

复制乔布斯 1255

kafka消息传输:概念、原理与实战

一、概念 1、消息模型 JMS规范:Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。 点对点与发布订阅最初是由JMS定义的。这两种模式主要区别或解决的问题就是发送到队列的消息能否重复消费(多订阅) 消息队列-点对点: 消息队列-发布订阅: 2、消息:消息是Kafka通信的基本单位,由一个固定长度的消息头和一个可变长度的消息体构成。 .

lxf20054658的专栏 1310

微服务 消息中间件Kafka详解

微服务消息中间件Kafka详解1.kafka概述1.1 kafka定义1.2 消息队列1.3 基础架构2. kafka安装部署2.1 安装部署2.2 命令操作3. 原理分析3.1工作流程3.2存储机制3.3 生产者3.4 消费者3.5 kafka高效读写数据3.6 zookeeper在kafka中的作用3.7 kafka事务4.kafka API4.1 Producer API4.1.1 消息发送流程4.1.2 异步发送 API4.1.2 同步发送 API4.2 Consumer API4.2.1 自动提交

靖节先生的博客 2397

Kafka 的实现原理

1、消息中间件能做什么? 1.1 异步处理 消息中间件主要解决的就是分布式系统之间消息传递的问题,它能够屏蔽各种平台以及协议之间的特性,实现应用程序之间的协同。举个非常简单的例子,就拿一个电商平台的注册功能来简单分析下,用户注册这一个服务,不单单只是 insert 一条数据到数据库里面就完事了,还需要发送激活邮件、发送新人红包或者积分、发送营销短信等一系列操作。假如说这里面的每一个操作,都需要消耗 1s,那么整个注册过程就需要耗时 4s 才能响应给用户。 但是我们从注册这个服务可以看到,每一个子操作都是相

跨语言,跨平台,跨应用 2449
上一篇: Java篇 (48):一个测试用例让你理解Java注解的设计与使用!
下一篇: Kafka 实战 (2):kafka安装部署·1
后台技术汇
博客等级 码龄11年 670粉丝 531原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后台技术汇

对你的帮助,是对我的最好鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值