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.xdnf.cn/news/145387.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

什么是GraphQL?它与传统的REST API有什么不同?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是GraphQL?⭐ 与传统的REST API 的不同⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣…

Konva基本处理流程和相关架构设计

前言 canvas是使用JavaScript基于上下文对象进行2D图形的绘制的HTML元素,通常用于动画、游戏画面、数据可视化、图片编辑以及实时视频处理等方面。基于Canvas之上,诞生了例如 PIXI、ZRender、Fabric、Konva等 Canvas渲染引擎,兼顾易用的同时…

DataBinding双向绑定简介

一、简介 在Vue中使用的是MVVM架构。通过ViewModel可以实现M层和V层数据的双向绑定。Model层的数据发生变化后,会自动更新View层UI。UI层数据发生变化(用户输入),可以驱动Model层的数据发生变化,借助于Vue框架中的View…

Spring cloud Sentinel介绍和安装

Sentinel介绍和安装 🌈初识Sentinel🌈安装Sentinel🌠docker 安装🌠下载sentinel镜像🌠启动sentinel镜像 🌠windows 安装🌠下载🌠运行 🌠sentinel访问 🌈微服务…

React 全栈体系(十四)

第七章 redux 六、react-redux 7. 代码 - react-redux 数据共享版 7.1 效果 7.2 App /* src/App.jsx */ import React, { Component } from "react"; import Count from "./containers/Count"; import Person from "./containers/Person";ex…

26947-2011 手动托盘搬运车 学习记录

声明 本文是学习GB-T 26947-2011 手动托盘搬运车. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了手动托盘搬运车(以下简称托盘车)的结构参数、技术要求、试验方法、检验规则、 标志、包装、运输和贮存。 本标准适用于额定载荷…

【数据结构--八大排序】之冒泡排序+选择排序+插入排序

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

2023彩虹全新SUP模板,知识付费模板,卡卡云模板

源码介绍: 2023彩虹全新SUP模板/知识付费模板/卡卡云模板,首页美化,登陆页美化,修复了pc端购物车页面显示不正常的问题。 请自行查毒。感觉彩虹不少源码可能都有不干净的东西 安装教程: 1.将这俩个数据库文件导入数据…

2023.09.30使用golang1.18编译Hel10-Web/Databasetools的windows版

#Go 1.21新增的 log/slog 完美解决了以上问题,并且带来了很多其他很实用的特性。 本次编译不使用log/slog 包 su - echo $GOPATH ;echo $GOROOT; cd /tmp; busybox wget --no-check-certificate https://go.dev/dl/go1.18.linux-amd64.tar.gz;\ which tar&&am…

Java on Azure Tooling 8月更新|以应用程序为中心的视图支持及 Azure 应用服务部署状态改进

作者:Jialuo Gan - Program Manager, Developer Division at Microsoft 排版:Alan Wang 大家好,欢迎阅读 Java on Azure 工具的八月更新。在本次更新中,我们将推出新的以应用程序为中心的视图支持,帮助开发人员在一个项…

Python计算巴氏距离

Python计算巴氏距离 巴氏距离简介 在统计中,巴氏距离(Bhattacharyya Distance)测量两个离散或连续概率分布的相似性。它与衡量两个统计样品或种群之间的重叠量的巴氏系数密切相关。巴氏距离和巴氏系数以20世纪30年代曾在印度统计研究所工作…

<Xcode> Xcode IOS无开发者账号打包和分发

关于flutter我们前边聊到的初入门、数据解析、适配、安卓打包、ios端的开发和黑苹果环境部署,但是对于苹果的打包和分发,我只是给大家了一个链接,作为一个顶级好男人,我认为这样是对大家的不负责任,那么这篇就主要是针…

解决WIFI网络登录困难的方法

当你遇到手机WIFI网络在连接成功后,总是提示网络受限或者当前网络无法连接互联网,但过一段时间后它又自动恢复正常的的问题,可以尝试用以下方法来解决。 第一步:打开WLAN连接设置界面,选择“更多设置” 第二步&#x…

分类预测 | MATLAB实现NGO-CNN北方苍鹰算法优化卷积神经网络数据分类预测

分类预测 | MATLAB实现NGO-CNN北方苍鹰算法优化卷积神经网络数据分类预测 目录 分类预测 | MATLAB实现NGO-CNN北方苍鹰算法优化卷积神经网络数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现NGO-CNN北方苍鹰算法优化卷积神经网络数据分类预测&…

c语言常用语法,长时间不用容易忘。

关键字 auto 声明自动变量const 定义常量,如果一个变量被 const 修饰,那么它的值就不能再被改变extern 声明变量或函数是在其它文件或本文件的其他位置定义register 声明寄存器变量signed 声明有符号类型变量或函数static 声明静态变量,修饰…

c#中的接口

使用IEnumerable统一迭代变量类型 class Program {static void Main(string[] args){int[] nums1 new int[] { 1, 2, 3, 4, 5 };ArrayList nums2 new ArrayList { 1, 2, 3, 4, 5 };Console.WriteLine(Sum(nums1));Console.WriteLine(Sum(nums2));Console.WriteLine(Avg(nums…

Windows系统利用cpolar内网穿透搭建Zblog博客网站并实现公网访问内网!

文章目录 1. 前言2. Z-blog网站搭建2.1 XAMPP环境设置2.2 Z-blog安装2.3 Z-blog网页测试2.4 Cpolar安装和注册 3. 本地网页发布3.1. Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 想要成为一个合格的技术宅或程序员,自己搭建网站制作网页是绕…

华为智能高校出口安全解决方案(3)

本文承接: https://qiuhualin.blog.csdn.net/article/details/133267254?spm1001.2014.3001.5502 重点讲解华为智能高校出口安全解决方案的攻击防御&安全运维&日志审计的部署流程。 华为智能高校出口安全解决方案(3) 课程地址攻击防…

【数据结构】【C++】封装哈希表模拟实现unordered_map和unordered_set容器

【数据结构】&&【C】封装哈希表模拟实现unordered_map和unordered_set容器 一.哈希表的完成二.改造哈希表(泛型适配)三.封装unordered_map和unordered_set的接口四.实现哈希表迭代器(泛型适配)五.封装unordered_map和unordered_set的迭代器六.解决key不能修改问题七.实…

家政服务小程序,家政系统开发

家政服务小程序,家政系统开发,打造一线家政系统,提效增收 家政服务小程序 互联网+家政系统,打造互联网+家政公司app开发,支持个性化定制,直接搭建,上手即用.实…