消息中间件之Kafka

OCC入门指南:从零开始掌握Open CASCADE Technology 本文是Open CASCADE Technology(OCC)的入门指南,详细介绍了这款开源C++三维几何建模内核的核心概念与价值。内容涵盖从零开始搭建开发环境、编写第一个显示立方体的程序,到深入理解其几何与拓扑核心、掌握Draw测试工具及Handle内存管理等关键编程范式,旨在帮助开发者快速掌握这一工业级CAD/CAE/CAM应用开发利器。 阅读详情

@(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.


消息中间件之Kafka学习笔记

关于消息中间件

什么是消息中间件?

举个生产者/消费者的例子,生产者生产鸡蛋,消费者消费鸡蛋,生产者生产一个鸡蛋,消费者就消费一个鸡蛋。
* 假设消费者消费鸡蛋的时候噎住了(系统宕机了),生产者还在生产鸡蛋,那新生产的鸡蛋就丢失了。
* 再比如生产者很强劲(大交易量的情况),生产者1秒钟生产100个鸡蛋,消费者1秒钟只能吃50个鸡蛋,那要不了一会,消费者就吃不消了(消息堵塞,最终导致系统超时),消费者拒绝再吃了,”鸡蛋“又丢失了,
* 这个时候我们放个篮子在它们中间,生产出来的鸡蛋都放到篮子里,消费者去篮子里拿鸡蛋,这样鸡蛋就不会丢失了,都在篮子里
* 而这个篮子就是”kafka“。鸡蛋其实就是“数据流”,系统之间的交互都是通过“数据流”来传输的(就是tcp、http什么的),也称为报文,也叫“消息”。消息队列满了,其实就是篮子满了,”鸡蛋“ 放不下了,那赶紧多放几个篮子,其实就是kafka的扩容。
kafka是干什么的,它就是那个”篮子”。

什么时候用消息中间件

解决耦合问题:
1. 数据驱动的任务依赖
2. 上游不关心多下游执行结果
3. 异步返回执行时间长

消息中间件的不足

  1. 系统更复杂,多了一个MQ组件
  2. 消息传递路径更长,延时会增加
  3. 消息可靠性和重复性互为矛盾,消息不丢不重难以同时保证
  4. 上游无法知道下游的执行结果,这一点是很致命的

Kafka简介

Alt text
Apache Kafka是由Apache软件基金会开发的一个开源消息系统项目,由Scala写成。Kafka最初是由LinkedIn开发,并于2011年初开源。
Kafka是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

  • 快速:单个kafka服务每秒可以处理数以千计从客户端发来的几百兆字节的读取和写入。
  • 可扩展性:kafka被设计为允许单个集群作为中央数据骨干大型组织。它可以弹性地,透明地扩展,无需停机。数据流被划分并分布在机器的集群中,允许数据流比任何单一机器的性能大,并让集群来协调消费者。
  • 可靠性:消息被保存在磁盘上,并在集群中复制,防止数据丢失。每个代理可以处理TB级的消息,而不影响性能。
  • 分布式设计:kafka使用现代化的集群为中心设计,并提供了强大的耐用性和容错性保证。

kafka名词解释

后面大家会看到一些关于kafka的名词,比如topic、producer、consumer、broker,我这边来简单说明一下。
* topic:Kafka将消息种子(Feed)分门别类, 每一类的消息称之为话题(Topic)。例如page view日志、click日志等都可以以topic的形式存在,Kafka集群能够同时负责多个topic的分发;
* partion:topic物理上的分组,一个topic可以分为多个partion,每个partion是一个有序的队列;
* segment:partion物理上由多个segment组成;
* offset:每个partion都由一系列有序的、不可变的消息组成,这些消息被连续的追加到partion中。每个partion中的每个消息都由一个连续的序列化叫做offset,由于partion唯一标识一条消息;
* producer: 发布消息的对象称之为话题生产者(Kafka topic producer);
* consumer:订阅消息并处理发布的消息的Feed的对象称之为话题消费者(consumers)消费者;
* broker: 消息中间件处理节点,一个Kafka节点就是一个Broker,多个Broker可以组成一个Kafka集群;

Client和Server之间的通讯是通过一条简单、高能并且和开发语言无关的TCP协议。
除了Java Client外,还有非常多的其它编程语言的Client。

Kafka的保证(Guarantees)

生产者发送到一个特定的Topic的分区上的消息将会按照它们发送的顺序依次加入
消费者收到的消息也是此顺序
如果一个Topic配置了复制因子( replication facto)为N, 那么可以允许N-1服务器宕机而不丢失任何已经增加的消息

Kafka的文件存储机制

一个商业化消息队列的好坏,其文件存储机制是衡量一个消息队列服务技术水平的最关键指标之一。

topic中partion存储分布

在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,
partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。

partion中文件存储方式

  • 每个partion(目录)相当于一个巨型文件被平均分配到多个大小相等segment(段)数据文件中。但每个段segment file消息数量不一定相等,这种特性方便old segment file快速被删除。
  • 每个partiton只需要支持顺序读写就行了,segment文件生命周期由服务端配置参数决定。
    这样做的好处就是能快速删除无用文件,有效提高磁盘利用率。

partion中segment文件存储结构

  • segment file组成:由2大部分组成,分别为index file和data file,此2个文件一一对应,成对出现,后缀”.index”和“.log”分别表示为segment索引文件、数据文件.
  • segment文件命名规则:partion全局的第一个segment从0开始,后续每个segment文件名为上一个segment文件最后一条消息的offset值。数值最大为64位long大小,19位数字字符长度,没有数字用0填充。
  • 索引文件存储大量元数据,数据文件存储大量消息,索引文件中元数据指向对应数据文件中message的物理偏移地址。

message物理结构参数说明:

关键字解释说明
8 byte offset在parition(分区)内的每条消息都有一个有序的id号,这个id号被称为偏移(offset),它可以唯一确定每条消息在parition(分区)内的位置。即offset表示partiion的第多少message
4 byte message sizemessage大小
4 byte CRC32用crc32校验message
1 byte “magic”表示本次发布Kafka服务程序协议版本号
1 byte “attributes”表示为独立版本、或标识压缩类型、或编码类型。
4 byte key length表示key的长度,当key为-1时,K byte key字段不填
K byte key可选
value bytes payload表示实际消息数据

在partion中如何通过offset找到message

Alt text
Alt text
例如读取offset=368776的message,需要通过下面2个步骤查找。
* 第一步查找segment file,其中00000000000000000000.index表示最开始的文件,起始偏移量(offset)为0.第二个文件00000000000000368769.index的消息量起始偏移量为368770 = 368769 + 1.同样,第三个文件00000000000000737337.index的起始偏移量为737338=737337 + 1,其他后续文件依次类推,以起始偏移量命名并排序这些文件,只要根据offset 二分查找文件列表,就可以快速定位到具体文件。 当offset=368776时定位到00000000000000368769.index|log
* 第二步通过segment file查找message 通过第一步定位到segment file,当offset=368776时,依次定位到00000000000000368769.index的元数据物理位置和00000000000000368769.log的物理偏移地址,然后再通过00000000000000368769.log顺序查找直到offset=368776为止。

从上图可知这样做的优点,segment index file采取稀疏索引存储方式,它减少索引文件大小,通过mmap可以直接内存操作,稀疏索引为数据文件的每个对应message设置一个元数据指针,它比稠密索引节省了更多的存储空间,但查找起来需要消耗更多的时间。

Kafka中读写message特点

写message

  • 消息从java堆转入page cache(即物理内存)。
  • 由异步线程刷盘,消息从page cache刷入磁盘。

读message

  • 消息直接从page cache转入socket发送出去。
  • 当从page cache没有找到相应数据时,此时会产生磁盘IO,从磁盘Load消息到page cache,然后直接从socket发出去;

Kafka高效文件存储设计特点

  • Kafka把topic中一个parition大文件分成多个小文件段,通过多个小文件段,就容易定期清除或删除已经消费完文件,减少磁盘占用。
  • 通过索引信息可以快速定位message和确定response的最大大小。
  • 通过index元数据全部映射到memory,可以避免segment file的IO磁盘操作。
  • 通过索引文件稀疏存储,可以大幅降低index文件元数据占用空间大小。

Kafka常见问题

  • kafka节点之间如何复制备份的?
  • kafka消息是否会丢失?为什么?
  • kafka最合理的配置是什么?
  • kafka的leader选举机制是什么?
  • kafka对硬件的配置有什么要求?
  • kafka的消息保证有几种方式?

参考

Oracle监听配置 Oracle监听配置## 标题 选择“监听程序配置”,然后下一步。 选择重新配置,然后下一步/。 不用管,按下一步。 下一步。 选择“否”,下一步。 选择"本地net服务名配置",然后下一步。 选择“重新配置”,然后下一步。 服务名 是"Oracle",然后下一步。 主机为你的IP地址,在doc系统下通过"ipconfig"获取IP地址。然后输入,然后下一步。 选择“是,进行测试... 阅读详情

相关推荐

本地服务器搭建Uptime Kuma网站监控服务

本文主要介绍如何在Linux系统中一键部署Uptime Kuma运维监控服务,并将这个服务映射至公网实现随时随地远程访问。如果您像我一样在服务器上托管了多个网站,并且没有足够的时间来手动检查每个网站的在线状态,那么当出现问题时,您可能无法及时收到通知来处理这些问题。因此,搭建一个在线监控服务是很有必要的,它可以在状态异常时提醒您,以便您能够及时处理问题,确保网站的稳定性和可用性。监控服务有很多,我最终选择了Uptime Kuma,因为Uptime Kuma是开源免费的,

Tiam_cr的博客 1822

【Kafka】kafka日志收集平台搭建(二)

继上一篇博文初步搭建好kafka+zookeeper+filebeat的集群平台后,这次我们继续给此集群添加功能并完善.

Stephen_Daa的博客 1066

VSCode终端打不开?3分钟搞定Windows下Terminal配置(附最新JSON设置方法)

本文针对Windows系统下VSCode终端无法启动的常见问题,提供了详细的诊断与解决方案。核心在于更新已弃用的旧配置,采用最新的JSON设置方法,通过定义`terminal.integrated.profiles.windows`和指定`terminal.integrated.defaultProfile.windows`,快速修复并优化终端配置,实现三分钟内恢复正常使用。

flower的专栏 741

中间件知识点-消息中间件(Kafka)二

消息中间件知识点

willard_z的博客 3121

如何在 Ubuntu 24.04 或 22.04 上安装和使用 GDebi

本文介绍了在Ubuntu 24.04上安装和使用GDebi的方法。GDebi是DPKG的轻量级替代品,能够自动解析并安装.deb包的依赖项。文章详细说明了系统更新、安装GDebi的步骤,并演示了通过GUI和CLI两种方式安装.deb包的操作流程。此外,还提供了验证安装和卸载包的方法。GDebi虽然非必需,但为用户提供了处理依赖项的另一种选择,适合需要安装本地Debian包的用户。

山岚的运维笔记 1978

STM32 Nucleo-144开发板开箱bring-up

最近做项目,用到STM32F446ZET6这款MCU,为了赶进度,前期软件需要提前开发,于是在某宝买了对应主控的官方开发板,为了避免遗忘,后面能翻出来回忆一些细节,就形成了本篇的主要内容,同时也希望能够帮助刚上手的小伙伴少走弯路,如果对你有帮助请点赞、收藏、转发,谢谢!

汽车电子软件领域知识分享 2676

kafka系列——日志篇

kafka的日志格式 ps:该图引用下面kafka日志版本的演变的博客 crc32:消息校验码                                                                                                                                 magic:消息版本号,0=v0,1=...

linxiaorui的博客 1万+

MICS-6814多气体传感器与ESP32-C3 Mini接口构建空气监测系统

cararenuity C3 Mini的多个ADC引脚,Wi-Fi和蓝牙LE以及紧凑的设计使其成为嵌入式物联网应用的绝佳选择。在这个项目中,我们将把MICS-6814多气体传感器与基于esp32 -C3的开发板cararenuity C3 Mini连接起来。更多模拟引脚:与ESP8266只有一个ADC引脚不同,基于esp32 -C3的cararenuity C3 Mini提供多个ADC引脚,使其成为多传感器应用的理想选择。紧凑可靠:该板的小尺寸使其成为嵌入式应用的理想选择,而不会牺牲性能。

hie98894的博客 770

KafkaMQ 日志采集最佳实践

本文主要介绍通过观测云消费 Kafka 采集到的日志数据,并将数据通过 Pipeline 进行字段提取和分类,便于用户对日志数据进行可视化分析。

观测云的博客 1817

用urdf给自己的ROS小车编写模型

3.3 使用urdf编写自己的ROS小车模型 3.3.1 常见的ROS小车结构有哪些? 下面就是常见的ROS小车,相信在大家的脑海里已经有了自己小车的样子,下面我和大家一起使用urdf对ros小车建模。 这里只对urdf进行简单介绍,然后就带大家使用urdf最基础的标签,建立机器人的urdf机器人模型。关于更多细节,请参看官网:http://wiki.ros.org/urdf/Tutorials 3.3.2 什么是urdf?建模的原因? 什么是urdf? URDF(Unified Robot Descri

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 1万+

【气候极端指数】MATLAB计算各种气候极端指数

简介各类气候极端指数,及其MATLAB计算代码

WW、forever的博客 4917

基于Kafka的日志收集平台

Kafka是一种消息中间件,主要用来进行业务解耦、流量削峰、日志收集和流处理(偏实时处理)。

qq_49552924的博客 1141

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

消息中间件之kafka

kafka的官网说自己是一个,我们通常认为kafka就是 一个(rabbitmq)kafka中存的是数据库与消息中间件的区别数据库中的数据是整个软件的状态(用户信息、课程、班级)消息中间件中的消息,是。

鲸屿的博客 1946

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Kafka消息中间件

Kafka消息中间件

usa_washington的博客 1213

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

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

消息中间件 --Kafka

Kafka 是一个分布式流媒体平台,类似于消息队列或企业消息传递系统。生产者发送消息,多个消费者只能有一个消费者接收到消息生产者发送消息,多个消费者都可以接收到消息producer:发布消息的对象称之为主题生产者(Kafka topic producer)topic:Kafka将消息分门别类,每一类的消息称之为一个主题(Topic)consumer:订阅消息并处理发布的消息的对象称之为主题消费者(consumers)broker:已发布的消息保存在一组服务器中,称之为Kafka集群。

m0_68041576的博客 1518

消息中间件-kafka

一、目前市面上比较流行的注册中心有Zoopeeker、consul、Eureka、etcd。1. Zoopeeker:Apache ZooKeeper is an effort to develop and maintain an open-source server which enables highly reliable distributed coordination.   Zoopeep...

chen846262292的专栏 5878

是消息中间件,又不仅仅是消息中间件的kafka

什么是 Kafka kafka 最初是 LinkedIn 的一个内部基础设施系统。最初开发的起因是,LinkedIn 虽然有了数据库和其他系统可以用来存储数据,但是缺乏一个可以帮 助处理持续数据流的组件。所以在设计理念上,开发者不想只是开发一个能够存储数据的系统,如关系数据库、Nosql 数据库、搜索引擎等等,更希望把数据看成一个持续变化和不断增长的流,并基于这样的想法构建出一个数据系统,一个数据架构。诶?不是说kafka是一个消息中间件么?怎么照这个说法更像一个数据库呢?我们接着介绍。 Kafka与传

weixin_47184173的博客 1496

【转载】Kafka、RabbitMQ、RocketMQ等 消息中间件 介绍和对比

在分布式系统中,我们广泛运用消息中间件进行系统间的数据交换,便于异步解耦。现在开源的消息中间件有很多,前段时间产品 RocketMQ (MetaQ的内核) 也顺利开源,得到大家的关注。MQ,Message queue,消息队列,就是指保存消息的一个容器。具体的定义这里就不类似于数据库、缓存等,用来保存数据的。当然,与数据库、缓存等产品比较,也有自己一些特点,具体的特点后文会做详细的介绍。

沙师弟专栏 2万+

Kafka 消息中间件

提供路由并保证消息的传送;如果发送消息时接收者不可用,消息对列会保留消息,直到可以成功地传递它为止,当然,消息队列保存消息也是有期限的。 二消息中间件特点1)解耦:允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。2)冗余:消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。许多消息队列所采用的"插入-获取-删除"范式中,在把一个消息从队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存直到你使用

hudeyong926的专栏 4792

【SpringCloud】Kafka消息中间件

Kafka 是一个分布式流媒体平台,类似于消息队列或企业消息传递系统。producer相当于生产者,consumer相当于消费者。Kafka Cluster相当于快递驿站,broker1、broker2相当于1,2号快递员,topic为它们的要派送的快递;producer:发布消息的对象称之为主题生产者(Kafka topic producer)topic:Kafka将消息分门别类,每一类的消息称之为一个主题(Topic)

Stringzhua的博客 1841

KafKa消息中间件

什么是kafka kafka核心组成 kafka leader选举 kafka isr扰动 kafka Rebalance kafka脑裂

西木风落 897

Apache kafka消息中间件

发布 & 订阅 处理存储 数据流,如消息传递系统高效并实时数据流安全地在分布式集群中复制存储 kafka是用于构建实时数据管道和流应用程序。具有横向扩展,容错,wicked fast(变态快)等优点,并已在成千上万家公司...

Cool的博客 228

kafka编程基础—消息中间件

消息中间件 Apache kafka是消息中间件的一种,我发现很多人不知道消息中间件是什么,在开始学习之前,我这边就先简单的解释一下什么是消息中间件,只是粗略的讲解,比较狭义的理解,然而目前像kafka这样的消息中间件已经可以做更多的事情了。 举例说明 举个例子,生产者消费者,生产者生产鸡蛋,消费者消费鸡蛋,生产者生产一个鸡蛋,消费者就消费一个鸡蛋,假设消费者消费鸡蛋的时候噎住了(系统宕机了),生...

心相印的专栏 438

Kafka(消息中间件)

Kafka的原理一、消息中间件概述(MQ)二、消息中间件的组成三、消息中间件模式分类3.1 点对点3.2 发布/订阅3.3 queue和topic对比四、消息中间件的优势4.1 系统解耦4.2 提高系统响应时间4.3 为大数据处理架构提供服务4.4 Java消息服务——JMS五、消息中间件应用场景5.1 异步通信5.2 解耦5.3 减少冗余5.4 扩展性高5.5 过载保护5.6 可恢复性5.7 顺序保护5.8 缓冲5.9 数据流处理6 消息中间件常用协议6.1 AMQP协议6.2 MQTT协议6.3 STO

qq_42005540的博客 1637

消息中间件以及Kafka的安装和使用

目录一.消息中间件1.概念2.为什么使用3.主要消息中间件的对比二.kafka1.安装2.名词解释:3.操作 一.消息中间件 1.概念 关注于数据的发送和接受,利用高效可靠的异步消息传递机制集成分布式系统。 2.为什么使用 业务解耦,代码解耦:例如,订单业务需要发送短信、推送app通知信息、扣除会员积分、发送email等,如果把这些全部写在订单业务代码中,订单代码将会变得十分臃肿,不利于修改维护,事物管理十分麻烦,使用中间件就不会有上述问题 同步变异步,加快业务响应时间,相对于RPC来说,异步通信使得生产

weixin_49165958的博客 471

kafka 消息中间件原理及实例

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

小宝哥Code的专栏 1051
上一篇: Neo4j索引笔记之SchemaIndex和LegacyIndex
下一篇: 数字花园建造指南之 quartz
XTool 极客工具
博客等级 码龄14年 171粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值