【大数据】kafka与Zookeeper不得不说的关系!

文章目录

  • 一、开场白:大数据时代的“黄金搭档”
  • 二、正文
    • 1. Kafka与ZooKeeper的那些事儿
    • 2. ZooKeeper的选举:一场“王位争夺战”
    • 3. Kafka的“备胎”计划:告别ZooKeeper的日子
    • 4. 源码揭秘:一探究竟的“八卦之旅”
  • 三、结尾:携手共进,共创大数据辉煌

一、开场白:大数据时代的“黄金搭档”

在数据流转的江湖中,Kafka和ZooKeeper这对“CP”一直是大家津津乐道的话题。一个负责消息的快速传递,一个负责集群的协调管理,它们共同守护着数据世界的和平与繁荣。今天,就让我们透过源码的面纱,看看这对“黄金搭档”是如何合作无间的。

二、正文

1. Kafka与ZooKeeper的那些事儿

Kafka,这位消息队列界的“快递小哥”,每天忙忙碌碌地送着数据包裹。而ZooKeeper,则像是“居委会大妈”,管理着所有快递小哥的名单和送件路线。它们的日常是这样的:

// KafkaServer.scala 中注册Broker的代码片段
zkClient.registerBrokerInZk(brokerId, brokerInfo, jmxEnabled)

这行代码就像是Kafka向ZooKeeper说:“大妈,我来报到啦,这是我的名片,请多关照!”

2. ZooKeeper的选举:一场“王位争夺战”

ZooKeeper集群中的Leader选举,就像是一场宫廷剧中的“王位争夺战”。每个节点都想要成为那个“话事人”,于是它们开始了激烈的竞争:

// ZookeeperLeaderElector.scala 中选举Controller的代码片段
zkClient.createSequential(electPath, electData, acls, CreateMode.EPHEMERAL)

这行代码背后,是一场节点之间的“选秀大赛”,最终胜出的节点将成为Leader,带领大家继续前进。

3. Kafka的“备胎”计划:告别ZooKeeper的日子

Kafka虽然习惯了ZooKeeper的照顾,但总想自己当家做主。于是,它偷偷搞起了“备胎”计划——KRaMM:

// KRaftControllerManager.java 中启动KRaft协议的代码片段
quorum.startup()

这里的quorum.startup()就像是Kafka在说:“是时候展现真正的技术了,我要自己管理家务事啦!”

4. 源码揭秘:一探究竟的“八卦之旅”

现在,让我们深入源码,看看这些“八卦”背后的故事。

  • Kafka注册Broker时,是这样和ZooKeeper打招呼的:
// KafkaZkClient.scala 中创建Broker节点的代码片段
def registerBrokerInZk(brokerId: Int, brokerInfo: String, jmxEnabled: Boolean): Unit = {val brokerIdPath = BrokerIdsPath + "/" + brokerIdzkClient.createPersistentPath(brokerIdPath, brokerInfo)
}
  • ZooKeeper选举Leader时,是这样的宫廷大戏:
// LeaderElection.java 中选举Leader的代码片段
public void runForLeader() throws Exception {String path = electionPath + "/" + id;zk.create(path, new byte[0], zkAcl, CreateMode.EPHEMERAL_SEQUENTIAL);// ... 省略选举细节 ...
}
  • Kafka的KRaMM计划,是这样的自我宣言:
// KafkaRaftClient.java 中启动KRaft客户端的代码片段
public void startup() {// ... 省略启动细节 ...
}

三、结尾:携手共进,共创大数据辉煌

虽然Kafka和ZooKeeper有时会像小情侣一样闹别扭,但它们始终是大数据江湖中最默契的搭档。随着Kafka的成长,它开始学会独立,但无论如何,它们都将携手共进,继续书写属于它们的传奇故事。
最后,让我们为这对“黄金搭档”送上最真挚的祝福,愿它们在大数据的舞台上,永远闪耀,共创辉煌!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/53202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入了解linux下TCP并发服务器和IO模型的实现

一、整体框架 在网络编程中,服务器的架构可以根据需求不同而有所不同。主要有以下几种框架: 1. 单循环服务器:同一时刻只处理一个客户端的请求,通常使用传统的阻塞式编程模型。这种模型简单易实现,但处理能力有限&am…

.NetCore发布到IIS

一:安装sdk(下载 .NET 8.0 SDK (v8.0.302) - Windows x64 Installer) 与donet Runtime(.NET Downloads (Linux, macOS, and Windows))选择对应的版本下载 二:解决问题:HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面&#x…

【C++11(一)之入门基础)】

文章目录 C简介统一的列表初始化{}初始化 std::initializer_liststd::initializer_list是什么类型:std::initializer_list使用场景: 声明autodecltypenullptr STL中一些变化 C简介 在2003年C标准委员会曾经提交了一份技术勘误表(…

大数据新视界--大数据大厂之MySQL 数据库课程设计:数据安全深度剖析与未来展望

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

一种误差较小的轮廓面积计算算法

1.背景 基于微分思想的轮廓面积计算方法之一是将多边形轮廓边与X轴会Y轴进行围合,形成一个个梯形,每个梯形的面积有符号,累计求和即得到多边形轮廓的面积。详见博主之前的文章, 记录导致计算轮廓面积出错的一个坑点-CSDN博客文章…

C++ Qt进程间通信机制之QRO、QRemoteObjectHost

文章目录 QRO_serverQRO_client深入浅出C++ Qt开发技术专栏:https://blog.csdn.net/yao_hou/category_9276099.html Qt高级开发视频教程 https://edu.csdn.net/course/detail/37447?spm=1001.2014.3001.5507 C++零基础入门视频教程 https://edu.csdn.net/course/detail/379…

Rust 学习笔记 3:一般性编程概念

上一篇:Rust 学习笔记 2:猜数字游戏 文章目录 1. 前言2. 背景3. Rust 中的一般性编程概念3.1 变量及其可变性(Mutability)3.1.1 变量定义3.1.2 常量3.1.3 变量隐藏(Shadowing) 3.2 基本类型3.2.1 标量(scalar)类型3.2.1.1 整型(Integer Types)3.2.1.2 浮…

项目拆解:短视频冷门赛道—ai绘画+温馨小屋,引流变现全攻略

在这个快节奏的时代,工作、学习、家庭的重担仿佛三座大山,让人喘不过气,心情时常跌入谷底。就像蜗牛遇到威胁会缩进壳里,我们也会在疲惫和忧虑时,渴望一个属于自己的温暖小窝,来安放疲惫的心灵。而自媒体平…

Flink 1.14.* Flink窗口创建和窗口计算源码

解析Flink如何创建的窗口,和以聚合函数为例,窗口如何计算聚合函数 一、构建不同窗口的build类1、全局窗口2、创建按键分流后的窗口 二、在使用窗口处理数据流时,不同窗口创建的都是窗口算子WindowOperator1、聚合函数实现2、创建全局窗口(入参…

SpringFrameWork学习笔记

本笔记基于【尚硅谷新版SSM框架全套视频教程,Spring6SpringBoot3最新SSM企业级开发】https://www.bilibili.com/video/BV1AP411s7D7?vd_sourcea91dafe0f846ad7bd19625e392cf76d8 总结 资料获取网址:https://www.wolai.com/v5Kuct5ZtPeVBk4NBUGBWF 技术…

Java项目: 基于SpringBoot+mysql房产销售系统 (含源码+数据库+开题报告+答辩PPT+毕业论文)

一、项目简介 本项目是一套基于SpringBootmysql房产销售系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、功能齐…

数学基础 -- 线性代数之LU分解

LU分解 LU分解(LU Decomposition)是线性代数中非常重要的一种矩阵分解方法。它将一个方阵分解为一个下三角矩阵(L矩阵)和一个上三角矩阵(U矩阵)的乘积。在数值线性代数中,LU分解广泛用于求解线…

Halcon基于灰度值的模板匹配

Halcon基于灰度值的模板匹配 基于灰度值的模板匹配是最经典的模板匹配算法,也是最早提出来的模板匹配算法。这种算法的根本思想是,计算模板图像与检测图像之间的像素灰度差值的绝对值总和(SAD方法)或者平方差总和(SSD…

Spring解析

目录 容器与 bean 1) 容器接口 演示1 - BeanFactory 与 ApplicationContext 的区别 代码参考 收获💡 演示2 - 国际化 2) 容器实现 演示1 - DefaultListableBeanFactory 代码参考 收获💡 演示2 - 常见 ApplicationContext 实现 代码参考 收获…

ico格式怎么转换?5个软件让你轻松转换文件格式

ico格式怎么转换?5个软件让你轻松转换文件格式 ICO格式是常用于网站图标和应用程序图标的文件格式,虽然它很常见,但并非所有图像编辑软件都支持直接保存为ICO格式。如果你需要将其他格式的图片(如PNG、JPG等)转换为IC…

读书学习笔记入门 # Datawhale X 李宏毅苹果书 AI夏令营

文章目录 学习目标:学习内容:Task 1 通过案例了解机器学习机器学习(Machine Learning,ML)和深度学习(Deep Learning,DL)的基本概念什么是回归(regression)什么…

深入解析Linux轻量级进程:线程的概念、原理、优缺点及其与进程的关系与区别

🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊 目录 📚Linux线程📕什么是线程*可以使用多进程去并发的执行一个进程的代码,那为什么要由线程呢&#x…

基于CloudflareSpeedTest项目实现git clone加速

1.网络测速 「自选优选 IP」测试 Cloudflare CDN 延迟和速度,获取最快 IP 更多内容参考项目:https://github.com/XIU2/CloudflareSpeedTest 国外很多网站都在使用 Cloudflare CDN,但分配给中国内地访客的 IP 并不友好(延迟高、丢…

Pixelmator Pro for Mac 专业图像处理软件【媲美PS的修图软件】

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件,将其从左侧拖入右侧文件夹中,等待安装完毕2、应用程序显示软件图标,表示安装成功 三、运行测试安装完成!!! 效果 一、下载软件 下载软件…

【STM32+HAL库】---- 通用定时器输入捕获PWM信号

硬件开发板:STM32G0B1RET6 软件平台:cubemaxkeilVScode1 新建cubemax工程 1.1 配置系统时钟RCC 1.2 配置定时器 1.2.1 配置输入捕获 选择通用定时器TIM2-Channel 1为输入捕获引脚,对应IO口是PA0,时钟源选择内部时钟源Internal clock,工作模…