Kafka 简介 + 学习笔记
消息队列
先说明消息队列是什么:
![[图片]](https://img-blog.csdnimg.cn/09c89d1df67548279412c5321584a366.png)
-
亚马逊:
消息队列是一种异步的服务间通信方式,适用于微服务架构。消息在被处理和删除之前一直存储在队列上。每条消息仅可被一位用户处理一次。消息队列可被用于分离重量级处理、缓冲或批处理工作以及缓解高峰期工作负载。 -
我的理解:
消息队列是一种进程/线程之间的通信方式,它是异步的、服务间解耦的、削峰填谷的,它是“永远在线”技术的基础。 -
常用的消息队列有:
Kafka、RabbitMQ、RocketMQ、ActiviMQ
Kafka是什么
概要
Apache Kafka 是一个开源流处理软件平台,由 LinkedIn 开发并捐赠给 Apache 软件基金会,用 Scala 和 Java 编写。 该项目旨在提供一个统一、高吞吐量、低延迟的平台来处理实时数据源。
它具有以下几个特性:
- 实时捕获数据
- 可持久存储(但一般会设置过期)
- 实时或者回顾性地处理数据
系统架构
图片引用了CSDN@Data跳动的博客:https://blog.csdn.net/weixin_43958974/article/details/122591425,大家有兴趣可以看看他对kafka的理解。
![[图片]](https://img-blog.csdnimg.cn/79e8702e47da4a57b03d1cfab50d5dbf.png)
常用概念:
- Broker
- Controller
- Partitions
- Consumer
- Producer
- Topic
- Zookeeper (3.0之后逐步要淘汰)
Broker
Broker是单个 Kafka server,Kafka 集群中的一台服务器就是一个 broker。
Broker从生产者接收消息,为其分配偏移量Offset,并将消息提交到磁盘存储。
偏移量是一个唯一的整数值,Kafka 在生成每条消息时都会递增并添加到该消息中。 偏移量对于在发生故障或中断时保持数据一致性至关重要,因为消费者在发生故障后使用偏移量返回到最后消费的消息。
Broker会向消费者提供已存到磁盘的信息。
![[图片]](https://img-blog.csdnimg.cn/3aa82010dc6046d69c5fb0a354ffff8b.png)
Controller
Kafka Broker 通过直接或间接共享信息形成集群。 在 Kafka 集群中,一个Broker充当Controller。 Controller负责管理分区和副本的状态,并执行管理任务,例如重新分配分区和注册处理程序以获取有关更改的通知。
尽管 Controller 服务运行在 Kafka 集群中的每个 Broker 上,但在任何时间点只能有一个 Broker 处于活动状态(当选)。 Broker Controller会在 Kafka 服务器启动时创建并启动。
Producer\Consumer
生产者是将事件发布(写入)到 Kafka 的客户端应用程序,而消费者是订阅(读取和处理)这些事件的客户端应用程序。
在 Kafka 中,生产者和消费者彼此完全解耦且互不可知,这是实现 Kafka 闻名的高可扩展性的关键设计元素。
![[图片]](https://img-blog.csdnimg.cn/45ef48c13b304bae91a553f3479d9a84.png)
Topic
事件被组织并持久化存储在Topic中,Topic类似于文件系统中的文件夹,事件是该文件夹中的文件(占磁盘)。
Kafka中的Topic始终是多生产者、多订阅者:一个主题可以有零个、一个或多个向其写入事件的生产者,以及零个、一个或多个订阅这些事件的消费者。
主题中的事件可以根据需要随时读取——与传统消息传递系统不同,事件在使用后不会被删除。(保留事件的事件是可配置的)。
Kafka 的性能在数据大小方面实际上是恒定的,因此长时间存储数据是完全可以的。但要考虑磁盘的容量。
![[图片]](https://img-blog.csdnimg.cn/5d8dd0a3b84a4e6d93e45a02484a2778.png)
Partition
Topic是存在多个Partition上的:这意味着一个Topic分布在不同broker的多个“桶”上。这种数据的分布式放置对于可扩展性非常重要,因为它允许client同时从多个代理读取数据或向多个broker写入数据。
同一分区内是顺序的:当新事件发布到主题时,它实际上会附加到主题的分区之一。 具有相同事件键(例如,客户或车辆 ID)的事件被写入同一分区,并且 Kafka 保证给定主题分区的任何消费者将始终按照与写入的顺序完全相同的顺序读取该分区的事件。
![[图片]](https://img-blog.csdnimg.cn/ae43b32e3384436ca020de6bfcda9653.png)
副本
为了使您的数据具有容错性和高可用性,每个主题都可以复制,甚至可以跨地理区域或数据中心进行复制,因此始终有多个代理拥有数据副本,以防出现问题时,您希望 对经纪人进行维护等等。 常见的生产设置是复制因子为 3,即始终存在数据的三个副本。 此复制是在主题分区级别执行的。
Lag
消息堆积的数量
Zookeeper(逐步淘汰)
Zookeeper 存储 Kafka 代理的元数据。 它充当代理和消费者之间的联络人,使分布式进程能够通过称为 znode 的数据寄存器的公共集中式命名空间相互通信。
随着 Apache Kafka 3.0及后续版本 的推出,Zookeeper 正在被删除。 许多用户抱怨必须管理单独的系统以及 Zookeeper 造成的单点故障。 展望未来,Kafka 代理本质上将承担 Zookeeper 的功能,将元数据存储在本地文件中。 控制器接管注册代理并从集群中删除失败的代理,并且在启动时代理仅从控制器读取已更改的内容,而不是完整状态。 这使得 Kafka 能够以更少的 CPU 消耗支持更多的分区。
合理地选择主题和分区
分区数量=消费者的线程数量
如果是自己单机测试的话,最优解是设置为机器CPU的核数
保证消息的顺序传递和容错性
同一partition内的消息是有序的,不同partition的消息是无序的。
MA中如果要保证同一个任务的数据是顺序传递的,会把同一个任务的消息分到同一个分区中。
Kafka高级工具
TODO: 探索Kafka生态系统中的相关工具和组件,如Kafka Connect和Kafka Streams,分享它们的作用和使用方式,以及如何将Kafka与其他技术进行集成
故障处理
常用kafka的命令:开源 kafka 使用指南
- 查看kafka状态
- 通过Grafanna监控,查看堆积情况(lag)
- 手动启动一个消费者线程,通过查看消费的日志,来判断消费是否正常:适用于机器日志因时间过长被清理的情况。
- 常用命令:https://blog.csdn.net/asd136912/article/details/103735037
进一步学习的资料:
kafka官网:https://kafka.apache.org/34/documentation.html
配置持久化时间:(默认为7天)https://blog.csdn.net/neweastsun/article/details/127109802
参考资料:
https://aws.amazon.com/message-queue/?nc1=h_ls
https://blog.csdn.net/neweastsun/article/details/127109802
https://www.upsolver.com/blog/apache-kafka-architecture-what-you-need-to-know
相关文章:
Kafka 简介 + 学习笔记
消息队列 先说明消息队列是什么: 亚马逊: 消息队列是一种异步的服务间通信方式,适用于微服务架构。消息在被处理和删除之前一直存储在队列上。每条消息仅可被一位用户处理一次。消息队列可被用于分离重量级处理、缓冲或批处理工作以及缓解高…...
Mybatis小记
目录 Mybatis第一个程序 xml文件 测试类 错误排查 Mybatis第一个程序 1.搭建实验数据库 2.导入MyBatis相关jar包 3.编写MyBatis核心配置文件 4.编写MyBatis工具类 5.创建实体类、 6.编写Mapper接口类 7.编写Mapper.xml配置文件 8.编写测试类 对象传参只引用需要的属性就可…...
如何向BertModel增加字符
这里写自定义目录标题 看起来add_special_tokens和add_tokens加入的新token都不会被切分。...
copilot切换下一条提示的快捷键
注意是右ALT 右ALT] 触发提示 右ALT/ 参考 https://www.cnblogs.com/strengthen/p/17210356.html...
Mongodb 删除文档Delete与Remove的区别
db.collection.remove() 此方法已被 mongosh 弃用 已弃用的方法替代方法db.collection.remove()db.collection.deleteOne() db.collection.deleteMany() db.collection.findOneAndDelete() db.collection.bulkWrite() 5.0版本更改。 db.collection.remove(<query>,…...
Docker 的基本概念和优势
Docker 是一种开源的容器化平台,可以轻松部署、管理和运行应用程序。它基于 Linux 容器技术,可以将应用程序和其依赖项打包到一个可移植的容器中,从而使应用程序更易于部署、移植和扩展。 Docker 的主要优势包括: 1. 简化部署&a…...
基于 xhr 实现 axios
基于 xhr 实现 axios 上面我们讲到二次封装 axios ,但是现在我们尝试完全脱离 axios,自己实现一个 axios,由于 axios 底层是基于 xhr 做了二次封装,所以我们也可以尝试一下。 xhr 二次封装 src/plugins/xhr.js /*** 请求拦截器…...
基于面向对象的大模型代码生成
众多周至,大模型非常依赖上下文,要让大模型生成比较好的代码,必须准确地给大模型传递上下文信息和指令。 痛点 目前大模型主要以自然语言进行交互,通过自然语言交互的好处是降低大模型的使用门槛,但是由于语言的不精确…...
易云维®FMCS厂务系统创造工厂全新的“数字低碳智能”应用场景
近年来,新一代信息技术的高速发展为传统工业与制造业领域带来了新的机遇。信息技术加持下的制造技术发展出了新的生产方式、产业形态与管理模式。通过搭建FMCS厂务系统进行数字化转型来实现数据互联互通与业务高效协同,助力企业向安全、绿色、节能、高效…...
【Linux应用部署篇】在CSDN云IDE平台部署Etherpad文档编辑器
【Linux应用部署篇】在CSDN云IDE平台部署Etherpad文档编辑器 一、CSDN云IDE平台介绍1.1 CSDN云IDE平台简介1.2 CSDN云IDE平台特点 二、本次实践介绍2.1 本次实践介绍2.2 Etherpad简介 三、登录CSDN云IDE平台3.1 登录CSDN开发云3.2 登录云IDE3.3 新建工作空间3.4 进入工作空间 四…...
基于java swing和mysql实现的汽车租赁管理系统(源码+数据库+文档+运行指导视频)
一、项目简介 本项目是一套基于java swing和mysql实现的汽车租赁管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经…...
Rigs-of-rods安装
Rigs-of-rods安装 安装git 首先下载git,下载地址:https://git-scm.com/download/win,安装git 安装cmake 下载cmake,下载地址:https://cmake.org/download/,安装cmake 安装vs2022下载ror的依赖库 git clone https://github.co…...
html学习第2篇---标签(1)
html学习第2篇---标签 1、标题标签h1---h62、段落标签p3、换行标签br4、文本格式化标签5、div标签和span标签6、图像标签img6.1、图像属性6.2、相对路径、绝对路径 7、超链接标签a7.1、属性7.2、分类 8、注释标签和特殊字符8.1、注释8.2、特殊字符 1、标题标签h1—h6 为了使网…...
爬虫逆向实战(二十四)--某鸟记录中心
一、数据接口分析 主页地址:某鸟记录中心 1、抓包 通过抓包可以发现数据接口是front/record/search/page 2、判断是否有加密参数 请求参数是否加密? 通过查看“载荷”模块可以发现,请求参数是加密的 请求头是否加密? 通过查…...
【操作系统】中断和异常
中断的作用 CPU上会执行两种程序:内核程序和应用程序 在适合的情况下,操作系统内核会把CPU的使用权主动让给应用程序,“中断”是让操作系统内核夺回CPU使用权的唯一途径(用户态转内核态)。 中断技术保证了并发。 中…...
锁策略、原子编程CAS 和 synchronized 优化过程
前言 锁冲突:两个线程获取一把锁,一个线程阻塞等待,一个线程加锁成功。 目录 前言 一、锁策略 (一)乐观锁和悲观锁 (二)重量级锁和轻量级锁 (三)自旋锁和挂起等待…...
【WINAPI】文件读写操作问题
问题描述 在利用WINAPI中的WriteFile和ReadFile函数进行文件读写操作时,出现无法正常读写文件报错。 分析问题 查阅WINAPI源码,查看参数列表各个参数的数据类型。 发现其中第二个参数,也就是需要写进文件的真实数据,其数据类型…...
【LeetCode-中等题】148. 排序链表
文章目录 题目方法一:集合排序(核心是内部的排序)方法二: 优先队列(核心也是内部的排序)方法三:归并排序(带递归) 从上往下方法四:归并排序(省去递…...
Ceph EC pg backfill run
pg的backfill请求也是发送到osd的work queue中与业务IO一起竞争。 PGRecovery::run backfill 57 void PGRecovery::run( 58 OSD *osd, 59 OSDShard *sdata, 60 PGRef& pg, 61 ThreadPool::TPHandle &handle) 62 { 63 osd->do_recovery(pg.get(), epoch_queued…...
腾讯云服务器地域怎么选?广州上海北京?
腾讯云服务器地域有什么区别?怎么选择比较好?地域选择就近原则,距离地域越近网络延迟越低,速度越快。关于地域的选择还有很多因素,地域节点选择还要考虑到网络延迟速度方面、内网连接、是否需要备案、不同地域价格因素…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
