Kafka:介绍和内部工作原理

2d813b5acf2e435b6f3171f8cf0b528e.jpeg

展示Kafka工作方式的简单架构。

什么是Kafka?为什么我们要使用它?它是消息队列吗?

•它是一个 分布式流处理平台或分布式 提交日志*。*•Kafka通常用于实时流数据管道,即在系统之间传输数据,构建不断流动的数据转换系统和构建事件驱动的系统。•它确实可以充当消息队列,但不仅限于此。它可以充当FIFO队列、发布/订阅消息系统、实时流处理平台。由于Kafka的持久性存储能力,甚至可以用作数据库。

那么从上面的定义中,什么是分布式流处理和提交日志?

•Kafka作为一个由一个或多个节点组成的集群工作,这些节点可以位于不同的数据中心,我们可以将数据/负载分布到Kafka集群中的不同节点,它具有固有的可扩展性、可用性和容错性。•Kafka将数据存储为一系列连续的记录,可以以不同的方法进行处理。•当您将数据推送到Kafka时,它会将它们附加到记录流中,就像将日志附加到日志文件中一样。

让我们开始...

为了理解这一点,让我们深入研究关键主题:

消息

•消息是Kafka的原子数据单位。•您可以推送字符串、整数、不同架构的JSON以及其他任何内容,但通常将不同类型的消息推送到不同的主题中。•可以使用一个键(Key),它只是一些元数据,用于确定目标分区。

主题

•我们可以将主题视为Kafka中的消息的逻辑类别,它们是相同类型数据的流。

分区

d5365eaf16fc2433da80a1bce306f2d1.jpeg
Image.jpeg

•这基本上是分片技术,是Kafka的扩展能力背后的概念。•分区是使消息能够并行分布在集群中的多个代理上的机制。使用这种并行性方法,Kafka可以同时支持多个消费者和生产者的线性扩展。这种分区方法允许消费者和生产者的线性扩展。•当我们将主题的数据拆分为多个流时,我们称所有这些较小的流为该主题的“分区”。•系统的性能还取决于设置分区的方式。•消息的偏移量是该消息的数组索引。图中块上的数字表示偏移量,第一个块位于第0个偏移量处,最后一个块位于(n-1)个偏移量处。

生产者

1.将消息发布到Kafka主题的Kafka客户端。

生产者用于决定将消息发送到哪个分区。根据不同的配置和参数,生产者决定目标分区。

让我们检查不同的情况:

1.未指定键:生产者将随机决定分区,并尝试平衡所有分区上的消息总数。2.指定键:生产者使用一致性哈希[1]将键映射到分区。一致性哈希是一种哈希机制,在相同的键上始终生成相同的哈希值,它最小化了重新哈希情况下键的重新分布。3.指定分区:您也可以硬编码目标分区。4.自定义分区逻辑:我们可以根据分区可以决定的一些规则编写规则。

您可以以3种方式将消息发送到Kafka。

1.发送并忘记 — 我们发送消息到Kafka代理并忘记它。由于Kafka是高可用的,成功的机会很大。2.同步发送 — 您希望等待所有感兴趣的消费者完成您希望它们完成的任何操作3.异步发送 — 您不希望等待所有感兴趣的消费者完成您希望它们完成的任何操作

我们还可以在将消息发送到代理之前在生产者上配置特性。

为了获得更好的性能,我们可以使用Avro序列化/反序列化器。

消费者

•消费者以有序的方式从分区中读取消息。•每次消费者读取一条消息时,它都会将偏移值存储到Kafka或Zookeeper上,表示它是消费者读取的最后一条消息。•因此,如果消费者节点崩溃,它可以恢复到上次读取的位置。此外,如果在任何时候消费者需要回到过去并读取旧消息,它只需重置偏移位置即可。

轮询循环:

您可以配置分区分配策略。

1.范围:消费者获取连续的分区。2.轮询:轮询分配器列出了所有可用的分区和所有可用的

消费者

•消费者以有序的方式从分区中读取消息。

每次消费者读取一条消息时,它都会将偏移值存储到Kafka或Zookeeper上,表示它是消费者读取的最后一条消息。

•因此,如果消费者节点崩溃,它可以恢复到上次读取的位置。此外,如果在任何时候消费者需要回到过去并读取旧消息,它只需重置偏移位置即可。•轮询循环:您可以配置分区分配策略。

1.范围:消费者获取连续的分区2.轮询:轮询分配器列出了所有可用的分区和所有可用的

尝试在重新平衡时最小化影响,保持大部分分配不变,但允许协作重新平衡批处理大小。我们可以配置每次轮询调用返回多少条记录和多少数据。

提交偏移量:

在读取消息时,我们可以更新消费者的偏移位置,这称为提交偏移量。可以启用自动提交,或者应用程序可以显式地提交偏移量。这可以同步和异步两种方式完成。

消费者组

一组消费者一起工作,从一个主题中读取消息。

1. 扇出交换: 可以由多个消费者组订阅单个主题。

一个实时示例是OTP发送服务,可以在号码上发送OTP,也可以发送到电子邮件。

1b1b6d689dd3cf0e8fc5fa0802c74f9c.jpeg
Image.jpeg

Otp示例

1.订单保证: 一个分区不能由同一个消费者组中的多个消费者读取。这由消费者组启用,只有消费者组中的一个消费者可以从单个分区读取。

e510bf843e673089377f128365bd5e76.jpeg
Image.jpeg

•在这里,生产者生成6条消息。每条消息都是键值对,假设键“A”的值为“1”,“C”的值为“1”,“B”的值为“1”,“C”的值为“2”……“B”的值为“2”。•我们的主题有3个分区,由于一致性哈希,具有相同键的消息始终进入同一分区,因此所有键为“A”的消息都会在一起分组,键为B和C的消息也是如此。•现在,由于每个分区只有一个消费者,它们只按顺序接收消息。因此,消费者将在A2之前接收A1,在B2之前接收B1,因此保持了顺序。•因此,对于3个分区,您可以最多拥有3个消费者,如果有4个消费者,一个消费者将处于空闲状态。但对于3个分区,您可以有2个消费者,然后一个消费者将从一个分区读取,另一个消费者将从两个分区读取。

代理

•单个Kafka服务器。•代理接收来自生产者的消息,为它们分配偏移量,然后将它们提交到分区日志,基本上是将数据写入磁盘,这赋予了Kafka其持久性特性。

集群

•由多个代理节点协同工作以提供可扩展性、可用性和容错性的集群。集群中的一个代理充当控制器,负责将分区分配给代理,•当一个分区被复制到3个代理时,其中一个代理将充当该分区的领导者,其余两个将成为追随者。•数据始终写入领导者代理,然后复制到追随者。通过这种方式,我们既不会丢失数据,也不会丢失集群的可用性,如果领导者崩溃,将选举出另一个领导者。

让我们深入一些编程内容:

1.创建一个主题,创建该主题的5个分区,并将所有5个主题的数据复制到总共3个节点。2.kafka-topics — create — zookeeper zookeeper:2181 — topic applog — partitions 5 — replication-factor 3

Zookeeper

在集群中多次听到这个术语,让我们看看它是什么?

•Zookeeper作为Kafka的中央配置和共识管理系统。它跟踪代理、主题和分区分配、领导者选举,基本上是有关集群的所有元数据。

结束语:

Kafka是一款出色的软件,具有丰富的功能,可以在各种用例中使用。Kafka非常适合现代分布式系统,因为它是通过设计分布式的。它最初由LinkedIn创建,目前由Confluent维护。像Uber、Netflix、Activision、Spotify、Slack、Pinterest、Coursera等顶级科技公司都在使用它。我们了解了Kafka的核心概念,以帮助您入门。还有很多其他东西,比如Kafka Stream API或kSql,由于时间有限,我们没有讨论。

参考资料:

1.《Kafka权威指南》(其中一些图片来自此处)2.https://www.confluent.io/blog/apache-kafka-intro-how-kafka-works/[2]

感谢阅读!

引用链接

[1] 一致性哈希: https://www.toptal.com/big-data/consistent-hashing?ref=hackernoon.com
[2] https://www.confluent.io/blog/apache-kafka-intro-how-kafka-works/: https://www.confluent.io/blog/apache-kafka-intro-how-kafka-works/?ref=hackernoon.com

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

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

相关文章

【GDB】 command 命令

GDB command 命令 语法 command 命令是一个很好用的调试命令,它配合断点使用,可以在指定的断点执行预先设置的命令 其语法为:command bread_id,这样会提示你输入你要执行的命令,以 end 结束。这个 bread_id 就是用 …

ElementUI之首页导航及左侧菜单(模拟实现)

目录 ​编辑 前言 一、mockjs简介 1. 什么是mockjs 2. mockjs的用途 3. 运用mockjs的优势 二、安装与配置mockjs 1. 安装mockjs 2. 引入mockjs 2.1 dev.env.js 2.2 prod.env.js 2.3 main.js 三、mockjs的使用 1. 将资源中的mock文件夹复制到src目录下 2. 点击登…

web前端tips:js继承——寄生式继承

上篇文章给大家分享了 js继承中的 原型式继承 web前端tips:js继承——原型式继承 今天给大家分享一下 js 继承中的 寄生式继承 寄生式继承 寄生式继承(Parasitic Inheritance)是一种基于原型式的继承方式,它通过创建一个仅用于…

聊聊wireshark的进阶使用功能 | 京东云技术团队

1. 前言 emmm,说起网络知识学习肯定离不来wireshark工具,这个工具能够帮助我们快速地定位网络问题以及帮助正在学习网络协议这块的知识的同学验证理论与实际的一大利器,平时更多的只是停留在初步的使用阶段。也是利用部门内部的网络兴趣小组…

使用YOLOv5的backbone网络识别图像天气 - P9

目录 环境步骤环境设置包引用声明一个全局的设备 数据准备收集数据集信息构建数据集在数据集中读取分类名称划分训练、测试数据集数据集划分批次 模型设计编写维持卷积前后图像大小不变的padding计算函数编写YOLOv5中使用的卷积模块编写YOLOv5中使用的Bottleneck模块编写YOLOv5…

maven中relativepath标签的含义

一 relative标签的含义 1.1 作用 这个<parent>下面的<relativePath>属性&#xff1a;parent的pom文件的路径。 relativePath 的作用是为了找到父级工程的pom.xml;因为子工程需要继承父工程的pom.xml文件中的内容。然后relativePath 标签内的值使用相对路径定位…

Lua表实现类

--类 Student { name "Holens",age 1,sex true,Say1 function()print(Student.name.."说话了")end,Say2 function(t)print(t.name.."说话了2")end } Student.Say1() print("*************************************")--声明后添加…

【MATLAB第77期】基于MATLAB代理模型算法的降维/特征排序/数据处理回归/分类问题MATLAB代码实现【更新中】

【MATLAB第77期】基于MATLAB代理模型算法的降维/特征排序/数据处理回归/分类问题MATLAB代码实现 本文介绍基于libsvm代理模型算法的特征排序方法合集&#xff0c;包括&#xff1a; 1.基于每个特征预测精度进行排序&#xff08;libsvm代理模型&#xff09; 2.基于相关系数corr的…

【切片】基础不扎实引发的问题

本次文章主要是来聊聊关于切片传值需要注意的问题&#xff0c;如果不小心&#xff0c;则很容易引发线上问题&#xff0c;如果不够理解&#xff0c;可能会出现奇奇怪怪的现象 问题情况&#xff1a; 小 A 负责一个模块功能的实现&#xff0c;在调试代码的时候可能不仔细&#x…

Go语言开发小技巧易错点100例(九)

往期回顾&#xff1a; Go语言开发小技巧&易错点100例&#xff08;一&#xff09;Go语言开发小技巧&易错点100例&#xff08;二&#xff09;Go语言开发小技巧&易错点100例&#xff08;三&#xff09;Go语言开发小技巧&易错点100例&#xff08;四&#xff09;Go…

工具学习--easyexcel-3.x 使用--写入基本使用,自定义转换--动态表头以及宽设置-

写在前面&#xff1a; easyexcel是alibaba开发简单导出未excel的工具。使用的情况还是比较多的。 文章目录 依赖导入写Excel快速入门对象设置ExcelProperty设置列属性ExcelIgnore 忽视列宽、行高格式转换时间格式化数字格式化自定义格式化 合并单元格其他更加个性化需求动态表…

Dynamic CRM开发 - 实体窗体(二)主窗体

主窗体是功能最丰富,使用场景最多的窗体。 主窗体界面如下图: 下面按照图中的序号,简述一下窗体的主要功能: 0、窗体的主要布局部分,即用户看到的内容,可以拖动右侧的字段到窗体中想要放置的地方。 默认有标题、常规(选项卡)、页脚三部分,常规处于高亮状态,即可以…

基于微信小程序的物流快递信息查询平台同城急送小程序(亮点:寄件、发票申请、在线聊天)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

云原生Kubernetes:Pod控制器

目录 一、理论 1.Pod控制器 2.Deployment 控制器 3.SatefulSet 控制器 4.DaemonSet 控制器 5.Job 控制器 6.CronJob 控制器 二、实验 1.Deployment 控制器 2.SatefulSet 控制器 3.DaemonSet 控制器 4.Job 控制器 5.CronJob 控制器 三、问题 1. showmount -e 报错…

树莓集团又一力作,打造天府蜂巢成都直播产业园样板工程

树莓集团再次推出惊艳之作&#xff0c;以打造成都天府蜂巢直播产业园为目标。该基地将充分展现成都直播产业园的巨大潜力与无限魅力&#xff0c;成为一个真正的产业园样板工程。 强强联手 打造未来 成都天府蜂巢直播产业园位于成都科学城兴隆湖高新技术服务产业园内&#xff0…

ACGAN

CGAN通过在生成器和判别器中均使用标签信息进行训练&#xff0c;不仅能产生特定标签的数据&#xff0c;还能够提高生成数据的质量&#xff1b;SGAN&#xff08;Semi-Supervised GAN)通过使判别器/分类器重建标签信息来提高生成数据的质量。既然这两种思路都可以提高生成数据的质…

Android 使用kotlin+注解+反射+泛型实现MVP架构

一&#xff0c;MVP模式的定义 ①Model&#xff1a;用于存储数据。它负责处理领域逻辑以及与数据库或网络层的通信。 ②View&#xff1a;UI层&#xff0c;提供数据可视化界面&#xff0c;并跟踪用户的操作&#xff0c;以便通知presenter。 ③Presenter&#xff1a;从Model层获…

FPGA的数字钟带校时闹钟报时功能VHDL

名称&#xff1a;基于FPGA的数字钟具有校时闹钟报时功能 软件&#xff1a;Quartus 语言&#xff1a;VHDL 要求&#xff1a; 1、计时功能:这是数字钟设计的基本功能&#xff0c;每秒钟更新一次,并且能在显示屏上显示当前的时间。 2、闹钟功能:如果当前的时间与闹钟设置的时…

【AI视野·今日NLP 自然语言处理论文速览 第四十四期】Fri, 29 Sep 2023

AI视野今日CS.NLP 自然语言处理论文速览 Fri, 29 Sep 2023 Totally 45 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers MindShift: Leveraging Large Language Models for Mental-States-Based Problematic Smartphone Use Interve…

软件测试(测试用例攻略)—写用例无压力

一、概念 测试用例的基本概念&#xff1a; 测试用例&#xff08;Test Case&#xff09;是为了实施测试而向被测试的系统提供的一组集合&#xff0c;这组集合包含&#xff1a;测试环境、操作步骤、测试数据、预期结果等要素 。 主要步骤&#xff1a; 测试环境——测试步骤—…