Kafka基本讲解
Kafka基本讲解
一:Kafka介绍
Kafka是分布式消息队列,主要设计用于高吞吐量的数据处理和消息传输,适用于日志处理、实时数据管道等场景。Kafka作为实时数仓架构的核心组件,用于收集、缓存和分发实时数据流,支持复杂的实时数据处理,实时需求分析,实时报表等应用。
二:Kafka基本架构图
基本讲解:
-
zookeeper:统一管理kafka集群
(1)保存kafka相关的元数据
(2)负责Kafka集群的整体协调和管理
(3)在Kafka集群中,当某个节点(如Broker或分区领导者Leader)出现故障时,ZooKeeper能够协助进行故障检测和恢复
-
Producer:生产者
向kafka发送消息,通过【轮询写入】方式,使得消息数据均匀分布,即:传数据给kafka。
-
Consumer:消费者
从kafka中获取消息(数据)进行消费,一般有三种策略可选(订阅模式,正则模式,指定模式)。
-
Kafka集群:
-
Broker:一台Kafka服务器一般是一个Broker【主要由该机器的核数来决定】,一个集群由多个Broker组成,一个Broker可以容纳多个Topic。
-
Topic(主题):是数据的逻辑分类单位,用于管理和组织消息流,Topic类似于mysql数据库中的库。Topic分为多个partition存放于不同的kafka服务器上。
-
partition(分区):每个Partition(分区)是一个有序的队列(分区有序,不能保证全局有序)
-
Leader:每个partition(分区)都有一个leader(领导者),负责处理该分区的所有读取和写入数据操作(生产者和消费者都面对leader对象进行操作)。
-
Replica:特殊的Follower。
-
Follower:每个partition(分区)含有多个follower(跟随者),主要用于与leader(领导者)同步数据,保持数据的一致性。当leader失效时,会从中选一个follower成为新的leader。
-
-
三:Kafka特点
1、多副本机制
1.1.容错性(In-Sync Replicas,同步副本集)
讲解:
-
在每个partition(分区)内部中,都含有一个leader(领导者)和多个follower(跟随者)。
-
其中可将其分为ISR队列(此处为三个)和Followers两部分。
-
正常状态(消息数据写入队列):
-
1、消息数据写到ISR队列中的每一个节点上(Leader和replica),当写入所有的ISR队列后,才可以进行下一个消息的写入。
-
2、Followers中节点可以同步Leader数据,且并无时间限制(时间可长可短)。
-
-
Leader失效场景:
- 当Leader失效时,会在ISR队列中选取一个作为新的Leader继续工作,同时会在Followers中选取一个进入ISR队列中。
1.2.读写分离
- Leader 负责写操作
- I S R 中任何一个 replica 都可以读操作
2、多分区(MP,multiple partitions)
每个Topic(主题)可以被划分成多个分区(partition),每个分区在物理上可以存储在不同的Broker节点上。
主要优势:
- 低延时
- 负载均衡:Kafka集群可以在多个Broker节点上均匀地分布分区,使得每个Broker负责处理的分区数量相对均衡【Topic(主题)分区数量最优设计:节点数*物理核数】
- 方便在集群中集成和扩展:Kafka提供了丰富的客户端API,支持多种编程语言,如Java、Python、Go、Scala等。同时,每个partition通过调整以适应它所在的机器(水平扩展),而一个Topic又可以有多个partition组成,因此整个集群可以适应适合的数据,从而达到扩缩容效果。
3、零拷贝
数据可以直接从磁盘传输到网络接口,避免了传统I/O操作中的多次内存拷贝和上下文切换,提高数据传输效率。
4、产销解耦
基本讲解:
-
Kafka作为一种分布式消息中间件。生产者只需要将数据发送到Kafka的特定主题(Topic)中,无需知道数据的具体消费者是谁;消费者只需要从Kafka订阅特定的主题,并拉取数据进行处理,无需知道数据的来源是从何而来【生产者 —> Kafka <— 消费者】
-
生产者数量:分区数 个生产者**【轮询写入】,均匀分布**。
-
消费者数量:分区数 个消费者一对一读取,并行消费。
=> 分布式最佳效果:spark处理的算子分区数(spark并行度) = kafka的分区数(有多少个队列)【分区上限主要由"核数"决定】。
四:消费者策略(读取数据方式)
Kafka为消费者提供了三种类型的订阅消费模式:subscribe(订阅模式)、SubscribePattern(正则订阅模式)、assign(指定模式)。
subscribe与SubscribePattern讲解
基本认知:
-
subscribe(订阅模式)与SubscribePattern(正则订阅模式)原理基本一致。
-
区别:subscribe(订阅模式)适用于【单主题】,SubscribePattern(正则订阅模式)适用于【多主题】。
讲解:
- 客户端提供groupId和订阅的主题(topic),会先找到这个groupId为123所对应的主题(topic),其中会有记录其offset(偏移量),然后通过这个这个offset(偏移量)继续从test01中进行数据的读取操作。
assign讲解
讲解:
- Redis与客户端之间进行数据交互,会将offset(偏移量)存储于Redis中。客户端提供topic(主题)给Redis,与offset形成键值对的形式,进而可以从test01中进行数据的读取操作。
五:Kafka命令讲解(shell 控制台处理)
1、查看主题
# --bootstrap-server kafka的地址:端口号
kafka-topics.sh --list --bootstrap-server single:9092
2、创建主题
# --topic 主题名称
# --partitions 分区数
# --replication-factor 每个分区的副本数
# --bootstrap-server kafka的地址:端口号
kafka-topics.sh --create --topic test01 --partitions 1 --replication-factor 1 --bootstrap-server single:9092
3、查看主题详情
# --topic 主题名称
# --bootstrap-server kafka的地址:端口号
kafka-topics.sh --describe --topic test01 --bootstrap-server single:9092
4、创建控制台【生产者】
# --topic 主题名称
# --broker-list single:9092 => 指定主题
kafka-console-producer.sh --broker-list single:9092 --topic test01 < /root/ebs_act_log/transaction_log/part-00001
在Kafka客户端工具中
5、创建控制台【消费者】
# --bootstrap-server kafka的地址:端口号
# --topic 主题
# --property print.key=true
kafka-console-consumer.sh --bootstrap-server single:9092 --topic test01 --property print.key=true --from-beginning
6、删除主题和数据(不能被正在生产或消费)
kafka-topics.sh --bootstrap-server single:9092 --delete --topic test01
Kafka实战(Scala操作)
Kafka实战(Scala操作)
相关文章:

Kafka基本讲解
Kafka基本讲解 一:Kafka介绍 Kafka是分布式消息队列,主要设计用于高吞吐量的数据处理和消息传输,适用于日志处理、实时数据管道等场景。Kafka作为实时数仓架构的核心组件,用于收集、缓存和分发实时数据流,支持复杂的…...
thinkphp6项目初始化配置方案二次修正版本
数据返回统一格式 app/BaseController.php新增文件内容在末尾,并在构造函数中实例化数据模型类 // 成功统一返回格式 function Result($data, $msg , $code 200, $httpCode 200): \think\response\Json {$res [code > $code,msg > $msg,data > $data];return j…...

XXE靶机教学
arp-scan -l主机发现 arp-scan -l 端口扫描 nmap -p- 192.168.48.139 服务探测 nmap -p80,5355 -sT -sC -sV 192.168.48.139 目录扫描 dirsearch -u http://192.168.48.139 访问robots.txt 发现两个可访问路径 burp抓包 测试是否存在xxe漏洞 <?xml version "1.…...

干货 | 2024步入数字化转型深水区,云原生业务稳定性如何保障(免费下载)
云原生业务的稳定性保障是一个涉及多个层面的复杂任务,以下是一些关键措施和策略,以确保云原生业务的高效稳定运行: 一、平台安全性评估与加固 云原生平台安全评估:对云原生平台(如Kubernetes、Docker等)…...
for(char c:s),std::vector<int> numbers 和std::int numbers[],.size()和.sizeof()区别
在C中当需要对某个容器或数组进行遍历时我们可以使用以下语句,c将会被赋值为s中的元素 for(char c:s)://s可以是任何满足条件的容器或数组for(int c:s):for(double c:s):for(float c:s):在C中我们来区分std::vector numbers {1, 2, 3, 4, 5};和std::int numbers[] …...

桌面云备份可以删除吗?安不安全
桌面云备份可以删除吗?答案是可以的。如果用户不需要这些备份或者想要释放存储空间,桌面云备份是可以进行删除的,并且删除桌面云备份是一个相对安全的过程,但需要注意以下几点来确保操作的安全性和数据的完整性。 一、桌面云备份…...

【爬虫实战】利用代理爬取电商数据
文章目录 前言工具介绍实战获取网站数据编写代码数据展示 推荐总结 前言 当今电商平台正经历着快速的转型与升级。随着技术的进步和用户需求的多样化,电商不仅从简单的在线购物演变为综合性的购物生态系统,还融合了人工智能、大数据和云计算等先进技术。…...
python如何统计列表中元素出现的次数
在 Python 中,可以使用多种方法来统计列表中元素出现的次数。以下是一些常用的方法: 方法 1: 使用 count() 方法 list 对象有一个内置的 count() 方法,可以直接统计某个元素在列表中出现的次数。 my_list [1, 2, 3, 2, 1, 4, 2] count_of…...
【算法】山脉数组的峰顶索引
难度:中等 题目描述: 给定一个长度为 n 的整数 山脉 数组 arr ,其中的值递增到一个 峰值元素 然后递减。 返回峰值元素的下标。 你必须设计并实现时间复杂度为 O(log(n)) 的解决方案。 示例 1: 输入:arr [0,1,0]…...

牛客 JZ31.栈的压入,弹出序列 C++写法
牛客 JZ31.栈的压入,弹出序列 C写法 思路🤔: 创建一个栈,push压入序列,然后用栈顶跟弹出序列比,如果一样就出栈并且继续比较,不一样就再次push入栈,直到压入序列走完,如果…...
PageHelper在Mybatis的一对多表关联时total数错误
最近在学习PageHelper遇到一个bug记录一下: 在Mybatis的一对多表中,PageHelper获取的total是所有的记录数,而不是我想要的第一次sql的记录数。 解决方案1: 不要在mapper层获取一对多关联,在service层先获取一&#…...

(20240806)硫氧镁 / 碱式硫酸镁-混凝土
一、目录 一篇博士论文,5篇硕士论文,南京航空航天大学双一流211,60。余红发团队 具体涉及到 (1) 碱式硫酸镁水泥的混凝土应用 、(一篇博士论文) 有微观分析 (2)混…...

string类的模拟实现(C++)
一、前言 想要模拟实现一个库中的类,那就要首先要熟悉如何使用这个类。建议通过下面博客,完成对Cstring类的学习。 C的string类-CSDN博客 二、模拟实现 我们将从string的成员函数即成员变量入手,模拟实现string类。 成员变量 string类的…...
C++_sizeof的相关知识点
1.指针的大小永远是固定的,取决于处理器位数,32位就是 4 字节,64位就是 8 字节 2.数组作为函数参数时会退化为指针,大小要按指针的计算 int func(char array[]) {printf("sizeof%d\n", sizeof(array));printf("s…...
Istio Proxy的Envoy代理架构中,Upstream提供的功能是:
Istio Proxy的Envoy代理架构中,Upstream提供的功能是: A. 接收来自Envoy连接和请求的主机,并返回响应 B. 连接的一组逻辑相同的上游主机 C. 将下游主机连接到Envoy的主机,用来发送请求并接受响应 选择A Istio Proxy的Envoy代理架…...

LeetCode 热题 HOT 100 (015/100)【宇宙最简单版】
【栈】No. 0155 最小栈【中等】👉力扣对应题目指路 希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持! …...

【HarmonyOS】鸿蒙应用实现截屏
【HarmonyOS】鸿蒙应用实现截屏 组件截屏 通过componentSnapshot的get函数,将需要截图的组件设置id传进去即可。 import { componentSnapshot } from kit.ArkUI; import { image } from kit.ImageKit;/*** 截图*/ Entry Component Preview struct SnapShotPage {S…...
Conda包依赖侦探:conda inspect命令全解析
Conda包依赖侦探:conda inspect命令全解析 在Conda环境中,管理包及其依赖关系是一项重要任务。conda inspect命令是一个强大的工具,它可以提供包的详细信息,包括依赖关系、链接、版本等。这对于诊断环境问题、理解包的依赖结构以…...

数模——灰色关联分析算法
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 文章目录 前言 一、基本概念了解 1.什么是灰色系统? 2.什么是关联分析? 二、模型原理 三、建模过程 1.找母序列(参考序列&am…...
Python爬虫技术 第27节 API和RESTful服务
Python 爬虫技术是一种自动化获取网页内容的方法,通常用于数据收集、信息抽取或自动化测试。在讲解 Python 爬虫技术时,我们通常会涉及到以下几个关键概念: HTTP 请求:爬虫通过发送 HTTP 请求来获取网页内容,这是爬虫与…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...