当前位置: 首页 > news >正文

Kafka 简介 + 学习笔记

消息队列

先说明消息队列是什么:
[图片]

  • 亚马逊:
    消息队列是一种异步的服务间通信方式,适用于微服务架构。消息在被处理和删除之前一直存储在队列上。每条消息仅可被一位用户处理一次。消息队列可被用于分离重量级处理、缓冲或批处理工作以及缓解高峰期工作负载。

  • 我的理解:
    消息队列是一种进程/线程之间的通信方式,它是异步的、服务间解耦的、削峰填谷的,它是“永远在线”技术的基础。

  • 常用的消息队列有:
    Kafka、RabbitMQ、RocketMQ、ActiviMQ

Kafka是什么

概要

Apache Kafka 是一个开源流处理软件平台,由 LinkedIn 开发并捐赠给 Apache 软件基金会,用 Scala 和 Java 编写。 该项目旨在提供一个统一、高吞吐量、低延迟的平台来处理实时数据源。

它具有以下几个特性:

  • 实时捕获数据
  • 可持久存储(但一般会设置过期)
  • 实时或者回顾性地处理数据

系统架构

图片引用了CSDN@Data跳动的博客:https://blog.csdn.net/weixin_43958974/article/details/122591425,大家有兴趣可以看看他对kafka的理解。
[图片]

常用概念:

  • Broker
  • Controller
  • Partitions
  • Consumer
  • Producer
  • Topic
  • Zookeeper (3.0之后逐步要淘汰)

Broker

Broker是单个 Kafka server,Kafka 集群中的一台服务器就是一个 broker。
Broker从生产者接收消息,为其分配偏移量Offset,并将消息提交到磁盘存储。
偏移量是一个唯一的整数值,Kafka 在生成每条消息时都会递增并添加到该消息中。 偏移量对于在发生故障或中断时保持数据一致性至关重要,因为消费者在发生故障后使用偏移量返回到最后消费的消息。
Broker会向消费者提供已存到磁盘的信息。
[图片]

Controller

Kafka Broker 通过直接或间接共享信息形成集群。 在 Kafka 集群中,一个Broker充当Controller。 Controller负责管理分区和副本的状态,并执行管理任务,例如重新分配分区和注册处理程序以获取有关更改的通知。

尽管 Controller 服务运行在 Kafka 集群中的每个 Broker 上,但在任何时间点只能有一个 Broker 处于活动状态(当选)。 Broker Controller会在 Kafka 服务器启动时创建并启动。

Producer\Consumer

生产者是将事件发布(写入)到 Kafka 的客户端应用程序,而消费者是订阅(读取和处理)这些事件的客户端应用程序。
在 Kafka 中,生产者和消费者彼此完全解耦且互不可知,这是实现 Kafka 闻名的高可扩展性的关键设计元素。
[图片]

Topic

事件被组织并持久化存储在Topic中,Topic类似于文件系统中的文件夹,事件是该文件夹中的文件(占磁盘)。
Kafka中的Topic始终是多生产者、多订阅者:一个主题可以有零个、一个或多个向其写入事件的生产者,以及零个、一个或多个订阅这些事件的消费者。
主题中的事件可以根据需要随时读取——与传统消息传递系统不同,事件在使用后不会被删除。(保留事件的事件是可配置的)。
Kafka 的性能在数据大小方面实际上是恒定的,因此长时间存储数据是完全可以的。但要考虑磁盘的容量。
[图片]

Partition

Topic是存在多个Partition上的:这意味着一个Topic分布在不同broker的多个“桶”上。这种数据的分布式放置对于可扩展性非常重要,因为它允许client同时从多个代理读取数据或向多个broker写入数据。
同一分区内是顺序的:当新事件发布到主题时,它实际上会附加到主题的分区之一。 具有相同事件键(例如,客户或车辆 ID)的事件被写入同一分区,并且 Kafka 保证给定主题分区的任何消费者将始终按照与写入的顺序完全相同的顺序读取该分区的事件。
[图片]

副本

为了使您的数据具有容错性和高可用性,每个主题都可以复制,甚至可以跨地理区域或数据中心进行复制,因此始终有多个代理拥有数据副本,以防出现问题时,您希望 对经纪人进行维护等等。 常见的生产设置是复制因子为 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 是一种开源的容器化平台&#xff0c;可以轻松部署、管理和运行应用程序。它基于 Linux 容器技术&#xff0c;可以将应用程序和其依赖项打包到一个可移植的容器中&#xff0c;从而使应用程序更易于部署、移植和扩展。 Docker 的主要优势包括&#xff1a; 1. 简化部署&a…...

基于 xhr 实现 axios

基于 xhr 实现 axios 上面我们讲到二次封装 axios &#xff0c;但是现在我们尝试完全脱离 axios&#xff0c;自己实现一个 axios&#xff0c;由于 axios 底层是基于 xhr 做了二次封装&#xff0c;所以我们也可以尝试一下。 xhr 二次封装 src/plugins/xhr.js /*** 请求拦截器…...

基于面向对象的大模型代码生成

众多周至&#xff0c;大模型非常依赖上下文&#xff0c;要让大模型生成比较好的代码&#xff0c;必须准确地给大模型传递上下文信息和指令。 痛点 目前大模型主要以自然语言进行交互&#xff0c;通过自然语言交互的好处是降低大模型的使用门槛&#xff0c;但是由于语言的不精确…...

易云维®FMCS厂务系统创造工厂全新的“数字低碳智能”应用场景

近年来&#xff0c;新一代信息技术的高速发展为传统工业与制造业领域带来了新的机遇。信息技术加持下的制造技术发展出了新的生产方式、产业形态与管理模式。通过搭建FMCS厂务系统进行数字化转型来实现数据互联互通与业务高效协同&#xff0c;助力企业向安全、绿色、节能、高效…...

【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实现的汽车租赁管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经…...

Rigs-of-rods安装

Rigs-of-rods安装 安装git 首先下载git&#xff0c;下载地址:https://git-scm.com/download/win,安装git 安装cmake 下载cmake&#xff0c;下载地址&#xff1a;https://cmake.org/download/&#xff0c;安装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 为了使网…...

爬虫逆向实战(二十四)--某鸟记录中心

一、数据接口分析 主页地址&#xff1a;某鸟记录中心 1、抓包 通过抓包可以发现数据接口是front/record/search/page 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”模块可以发现&#xff0c;请求参数是加密的 请求头是否加密&#xff1f; 通过查…...

【操作系统】中断和异常

中断的作用 CPU上会执行两种程序&#xff1a;内核程序和应用程序 在适合的情况下&#xff0c;操作系统内核会把CPU的使用权主动让给应用程序&#xff0c;“中断”是让操作系统内核夺回CPU使用权的唯一途径&#xff08;用户态转内核态&#xff09;。 中断技术保证了并发。 中…...

锁策略、原子编程CAS 和 synchronized 优化过程

前言 锁冲突&#xff1a;两个线程获取一把锁&#xff0c;一个线程阻塞等待&#xff0c;一个线程加锁成功。 目录 前言 一、锁策略 &#xff08;一&#xff09;乐观锁和悲观锁 &#xff08;二&#xff09;重量级锁和轻量级锁 &#xff08;三&#xff09;自旋锁和挂起等待…...

【WINAPI】文件读写操作问题

问题描述 在利用WINAPI中的WriteFile和ReadFile函数进行文件读写操作时&#xff0c;出现无法正常读写文件报错。 分析问题 查阅WINAPI源码&#xff0c;查看参数列表各个参数的数据类型。 发现其中第二个参数&#xff0c;也就是需要写进文件的真实数据&#xff0c;其数据类型…...

【LeetCode-中等题】148. 排序链表

文章目录 题目方法一&#xff1a;集合排序&#xff08;核心是内部的排序&#xff09;方法二&#xff1a; 优先队列&#xff08;核心也是内部的排序&#xff09;方法三&#xff1a;归并排序&#xff08;带递归&#xff09; 从上往下方法四&#xff1a;归并排序&#xff08;省去递…...

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…...

腾讯云服务器地域怎么选?广州上海北京?

腾讯云服务器地域有什么区别&#xff1f;怎么选择比较好&#xff1f;地域选择就近原则&#xff0c;距离地域越近网络延迟越低&#xff0c;速度越快。关于地域的选择还有很多因素&#xff0c;地域节点选择还要考虑到网络延迟速度方面、内网连接、是否需要备案、不同地域价格因素…...

通过信道优化数据传输的通信链路的实现附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码及仿真咨询…...

Pixel Script Temple 为C++高性能计算项目生成优化脚本

Pixel Script Temple 为C高性能计算项目生成优化脚本 1. 高性能计算开发的痛点 在C高性能计算领域&#xff0c;开发者经常面临一个共同困境&#xff1a;明明硬件资源充足&#xff0c;但程序性能就是上不去。你可能也遇到过这样的情况 - 代码逻辑没问题&#xff0c;算法也正确…...

如何让数学公式编辑达到手写速度:Obsidian LaTeX Suite深度解析

如何让数学公式编辑达到手写速度&#xff1a;Obsidian LaTeX Suite深度解析 【免费下载链接】obsidian-latex-suite Make typesetting LaTeX as fast as handwriting through snippets, text expansion, and editor enhancements 项目地址: https://gitcode.com/gh_mirrors/o…...

Qwen3.5-4B-Claude-Opus-GGUF部署教程:llama-server API对接与Web前端联调

Qwen3.5-4B-Claude-Opus-GGUF部署教程&#xff1a;llama-server API对接与Web前端联调 1. 模型概述 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是基于Qwen3.5-4B的推理蒸馏模型&#xff0c;特别强化了结构化分析、分步骤回答、代码与逻辑类问题的处理能力。该版本…...

别再手动点灯了!用Simulink串口实时控制STM32,5分钟搞定双向通信

基于Simulink与STM32的实时双向通信实战指南 在嵌入式系统开发中&#xff0c;快速原型验证是提升效率的关键环节。传统开发模式下&#xff0c;工程师需要花费大量时间编写底层通信协议、调试硬件接口&#xff0c;而真正核心的控制算法验证反而被边缘化。本文将介绍一种高效开发…...

ClickHouse配置优化实战:关键参数详解与性能调优指南

1. ClickHouse配置优化的核心逻辑 ClickHouse作为一款高性能的OLAP数据库&#xff0c;其配置优化需要遵循三个黄金法则&#xff1a;资源隔离、瓶颈定位和场景适配。我见过太多团队一上来就盲目调整参数&#xff0c;结果反而导致性能下降。正确的做法应该是先理解系统行为&#…...

Segment-and-Track-Anything实战案例:从街景到细胞的全场景应用

Segment-and-Track-Anything实战案例&#xff1a;从街景到细胞的全场景应用 【免费下载链接】Segment-and-Track-Anything An open-source project dedicated to tracking and segmenting any objects in videos, either automatically or interactively. The primary algorith…...

保姆级教程:用PHPStudy+红日靶场复现一次完整的内网渗透(从外网打到域控)

从零构建内网渗透实战&#xff1a;PHPStudy环境下的红日靶场攻防演练 在网络安全领域&#xff0c;内网渗透测试是检验企业防御体系完整性的重要手段。本文将带领读者使用常见的PHPStudy环境搭建红日靶场&#xff0c;通过模拟真实攻击路径&#xff0c;从外网Web渗透逐步深入内网…...

foobox-cn:重塑foobar2000视听体验的智能界面解决方案

foobox-cn&#xff1a;重塑foobar2000视听体验的智能界面解决方案 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn 你是否曾因音乐播放器界面过于简陋而错失沉浸式的听觉享受&#xff1f;当功能性凌驾…...

Android 11文件权限避坑指南:为什么你的APP无法修改原文件?

Android 11存储权限深度解析&#xff1a;从沙盒机制到实战解决方案 在去年的一次应用升级中&#xff0c;我们团队遇到了一个棘手的问题&#xff1a;用户反馈图片编辑后无法保存到原位置。经过排查&#xff0c;发现这是Android 11引入的存储权限机制变化导致的。作为开发者&…...