Kafka基础架构与核心概念

Kafka简介

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。架构特点是分区、多副本、多生产者、多订阅者,性能特点主要是高吞吐,低时延。

Kafka主要设计特征如下:

  • 通过时间复杂度为O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。

  • 高吞吐量 :即使是非常普通的硬件机器,Kafka也可以支持每秒数百万的消息。

  • 支持Kafka 服务间的消息分区,及分布式消费,同时保证每个分区内的消息顺序传输。

  • 同时支持离线数据处理和实时数据处理。

  • 支持数据水平扩展和副本备份

  • Kafka集群按照主题分类管理,一个主题可以有多个分区,一个分区可以有多个副本分区(分区的容灾手段)

Kafka的消息传递模型使用的是发布-订阅模块,对于消息的消费使用的是消费者主动拉取模型,并不像rocketmq、rabbitmq等主流消息中间件提供服务端推送消息服务。如果要实现类似于推送的效果,只能通过消费者轮询的方式。

Kafka主要有如下几个核心API:

  • Admin API 主要用于管理和检查Topics, brokers和其他kafka对象

  • Producer API:发布消息、事件流到一个或多个kafka主题

  • Consumer API:订阅一个或多个kafka主题,处理producer api发布的事件流消息

  • Streams API:kafka通过流api来实现流处理应用程序和微服务。它提供了处理事件流的高级功能,包括转换、聚合和连接等有状态操作、窗口化、基于事件时间的处理等等。从一个或多个主题中读取输入,以便生成到一个或多个主题的输出,有效地将输入流转换为输出流。

  • Connector API:kafka连接api来构建和运行可重用的数据导入/导出连接器,这些连接器使用(读取)或产生(写)来自外部系统和应用程序的事件流,以便它们可以与kafka集成。例如,像postgresql这样的关系数据库的连接器可能会捕获对一组表的所有更改。然而,在实践中,您通常不需要实现您自己的连接器,因为kafka社区已经提供了数百个现成的连接器。

Kafka优势

  • 高吞吐:单机每秒吞吐几十上百万消息

  • 高性能:单节点支持上千个客户端,并保证零停机和零数据丢失

  • 数据持久化存储:通过将消息持久化到硬盘以及分区副本备份机制防止数据丢失

  • 支持分布式水平扩容,集群副本化容灾部署。Producer、Broker和Consumer均支持集群化

  • 可靠性:通过主题分区扩容,副本容灾,集群化等手段提供高可靠性

  • 客户端状态维护:消息被处理的状态是在Consumer端维护,而不是由server端维护。当失败时能自动平衡

  • 提供多种语言的客户端sdk。Kafka支持Java、.NET、PHP、Python等多种语言

Kafka应用场景

Kafka主要应用场景:日志收集系统、消息队列系统、用户活动跟踪等。

  • 日志收集:用于收集各种服务的日志

  • 消息系统:用于解耦生产者、消费者,缓存消息等场景,

  • 用户活动跟踪:如对用户在网站的搜索、点击等行为的实时监控分析

  • 运营指标:用于记录运营监控数据

  • 流式处理:构建实时的流数据处理程序来转换或处理数据流

Kafka基础架构与核心概念

 

根据如上基础架构图,大致可以看出kafka有如下架构特点:

  • 多生产者

  • 基础主题对消息进行分类

  • 一个主题支持多个分区(数据的水平扩容),分区的容灾是基于Kraft数据一致性协议的多副本机制,分Leader副本和Follwer副本

  • 多个broker,不同broker可存储不同的分区和分区副本

  • 消费者按组进行消费,在同一个消费组内,一个分区消息只能被一个消费者消费,因此对于同一消费组的某个消费者来说,它的消息是有序的,但对于不同消费者来说,它们之间的消息不能做到有序。需要严格顺序的情况下只能设置一个分区来解决。

消息和批次

Kafka的数据单元称为消息,可以把消息看成是数据库里的一条“记录”。消息主要由消息头、主题、分区、键、值、消息偏移量等信息组成,为提高效率,消息通常是分批写入Kafka,批次就是一组消息,这些消息属于同一个主题和分区。同一批次的消息可以进行压缩以提升网络传输能力,批次越大,消息越多,单次网络传输时间越长,但比起小批次消息来说还是减少了网络开销,因为大批次消息需要传输的次数更少。

主题(Topic)和分区(Partition)

Kafka的消息通过主题进行分类。主题可以被分为若干分区,一个主题通过分区分布于Kafka集群中,提供了横向扩展的能力。主题跟分区,用关系型数据库来类比 的话就是表和数据分片,其本质是一样的,都是存储数据和数据扩容的一种方式。

 

副本(Replicas)

Kafka 使用主题来组织数据,每个主题被分为若干个分区,每个分区有多个副本。那些副本被保存在broker 上,每个broker 可以保存成百上千个属于不同主题和分区的副本。

副本有两种角色,Leader和Follwer,数据一致性基于Raft协议。master的选举、数据的复制参考raft协议即可。

AR(Assigned Repllicas)

分区中的所有副本统称为AR(Assigned Repllicas)。

ISR(In-Sync Replicas)

所有与leader副本保持一定程度同步的副本(包括Leader)组成ISR(In-Sync Replicas),ISR集合是AR集合中的一个子集。消息会先发送到leader副本,然后follower副本才能从leader副本中拉取消息进行同步,同步期间内follower副本相对于leader副本而言会有一定程度的滞后。

OSR(Out-Sync Relipcas)

与leader副本同步滞后过多的副本(不包括leader)副本,组成OSR(Out-Sync Relipcas)。

AR=ISR+OSR(通常为空)

High Watermak

HW是High Watermak的缩写, 俗称高水位,它表示了一个特定消息的偏移量(offset),消费之只能拉取到这个offset之前的消息。

LEO

LEO是Log End Offset的缩写,它表示了当前日志文件中下一条待写入消息的offset。

生产者(Producer)和消费者(Consumer)

生产者(Producer):向主题发布消息。生产者默认情况下把消息均衡地分布到主题的所有分区上,策略有轮询指定分区、消息key hash值对分区数取模,指定分区。

消费者Consumer):订阅主题消息,消费者通过偏移量来区分已经读过的消息。

消费者群组:一个主题可以有多个分区,一个分区可以被不同的消费者群组消费,但一个分区在同一消费者群组内只能被一个消费者消费(避免重复消费)。群组消费可以加强消费能力,避免消息过度堆积,但同时带来了无法做到严格有序消费问题。

 

broker和集群

broker 是集群的组成部分,broker 集群由一个或多个 broker 组成,每个集群都有一个 broker 同时充当了集群控制器的角色(自动选举)。broker接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。broker为消费者提供服务,对读取分区的请求做出响应,返回已经提交到磁盘上的消息。单个broker可以轻松处理数千个分区以及每秒百万级的消息量。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VisualStudio如何进行插件开发?

文章目录 0.引言1.工具准备2.创建插件项目(VSIX)3.自定义VSIX属性4.创建一个command命令5.设置command名称6.编写command功能7.调试插件8.安装插件 0.引言 使用Visual Studio插件可以极大地提升开发效率、提供更好的集成环境、丰富扩展生态系统、方便调试…

python报错:‘unicodeescape‘ codec can‘t decode bytes解决办法

参考:https://blog.csdn.net/shuyudexiaowu/article/details/108771481 我的代码是这样: 错误原因是:python把字符串中的反斜杠“ \ ”当成了字符串的一部分,而不是反斜杠。 解决办法两个: 1、在文件目录前加个 r,&…

线性神经网路——线性回归随笔【深度学习】【PyTorch】【d2l】

文章目录 3.1、线性回归3.1.1、PyTorch 从零实现线性回归3.1.2、简单实现线性回归 3.1、线性回归 线性回归是显式解,深度学习中绝大多数遇到的都是隐式解。 3.1.1、PyTorch 从零实现线性回归 %matplotlib inline import random import torch #d2l库中的torch模块&a…

PCL 计算点云AABB包围盒

目录 一、算法原理二、代码实现1、直接计算2、惯性矩法三、结果展示本文由CSDN点云侠原创。爬虫自重,把自己当个人。 一、算法原理 AABB包围盒又称了 轴对齐包围盒,是点云包围盒里最简单的一种,其计算方法也极其简单,看代码即可理解!!!目前PCL中有直接计算和基于惯性偏…

Xshell使用sftp传输文件

单击工具栏新建回话图标,在弹出的新建回话窗口中协议选择SFTP,输入主机名或ip地址,端口号22,单击连接,输入用户名和密码完成创建连接。 本地/远程目录设置:新建会话时在下图中SFTP中设置文件上传下载的本地…

TOOD Task-aligned One-stage Object Detection 论文学习

1. 解决了什么问题? 目标检测通过多任务学习的方式,协同优化目标的分类和定位。分类任务会学习目标的判别特征,关注于目标的显著性或关键区域,而定位任务则学习准确地定位目标的边界。因为定位和分类的学习机制不同,这…

DP学习第三篇之不同路径

DP学习第三篇之不同路径 62. 不同路径 - 力扣(LeetCode) 一.题目解析 二. 算法原理 状态表示 tips: 经验题目要求。以[i,j]位置为结尾,。。。 dp[i][j]: 走到[i, j]位置时,一共多少种路径 状态转移方程 tips: 用之前或之后的状…

Visual Studio Code安装详细教程

win电脑可以打开该网址 vs官方下载网站 点击这里免费下载 下载下来是一个安装程序,直接以管理员身份运行即可 我同意安装,然后选择D盘的一个空间进行安装 然后点击下一步 安装如图所示勾选,点击下一步 点击安装 等待安装完成即可 打开…

Electron 学习_BrowserWindow

BrowserWindow创建并控制浏览器窗口(主进程) 条件:在 app 模块 emitted ready 事件之前,您不能使用此模块。 1.在加载页面时,渲染进程第一次完成绘制时,如果窗口还没有被显示,渲染进程会发出 ready-to-show 事件 。 在…

前端(九)——探索微信小程序、Vue、React和Uniapp生命周期

🙂博主:小猫娃来啦 🙂文章核心:探索微信小程序、Vue、React和Uniapp生命周期 文章目录 微信小程序、Vue、React和Uniapp的基本定义和应用领域微信小程序生命周期生命周期概述页面生命周期应用生命周期组件和API的生命周期钩子 Vu…

失去中国市场的三星继续称霸全球,中国手机的份额反而进一步下降了

市调机构canalys公布了二季度全球手机市场的数据,数据显示三星、苹果的市场份额保持稳定并位居全球前二,三星的表现显然让人称奇,一直被唱衰,却一直都稳稳占据全球手机市场第一名。 从Canalys公布的数据可以看到,三星以…

从零开始学习自动驾驶路径规划-环境配置

从零开始学习自动驾驶路径规划-环境配置 前面,每个人遇到的问题不一样,这里记录了配置步骤和目前遇到的问题,会持续更新报错解决方法。配置时有报错请认真看报错经验 环境配置步骤(18.04和20.04都可以,有些问题没遇到…

vue中重新获取数据导致页面加长,要求在页面更新之后浏览器滚动条滚动到之前浏览记录的位置。以及获取当前页面中是哪个元素产生滚动条的方法。

目前的页面样式为&#xff1a; 代码是&#xff1a; <section id"detailSection"><el-tableref"multipleTable":data"logDetailList"style"width: 650px;margin:20px auto;"id"dialogDetail":show-header"fals…

【NLP】图解变压器(transformer)

一、说明 在这篇文章中&#xff0c;我们将看看 The Transformer——一个利用注意力来提高这些模型训练速度的模型。转换器在特定任务中优于谷歌神经机器翻译模型。然而&#xff0c;最大的好处来自变压器如何适应并行化。事实上&#xff0c;谷歌云建议使用The Transformer作为参…

【Linux后端服务器开发】协议定制(序列化与反序列化)

目录 一、应用层协议概述 二、序列化与反序列化 Protocal.h头文件 Server.h头文件 Client.h头文件 server.cpp源文件 client.cpp源文件 一、应用层协议概述 什么是应用层&#xff1f;我们通过编写程序解决一个个实际问题、满足我们日常需求的网络程序&#xff0c;都是应…

0基础学习VR全景平台篇 第69篇:VR直播-如何设置广告

直播间可以插入轮播广告&#xff0c;并且支持外链跳转&#xff0c;能够有效地提升VR直播活动的转化率。 1、点击&#xff0c;添加广告 2、广告图展现形式分为两种&#xff1a;普通广告和全屏广告&#xff0c;普通广告在非全屏播放的直播间显示&#xff0c;全屏广告在全屏播放的…

【Visual Studio】VS调用tensorflow C++API的配置(无需编译)

1. 首先下载并安装visual studio Visual Studio 2015 安装教程&#xff08;附安装包&#xff09;&#xff0c;按照博客中顺序来就可以 如果在安装过程中提示安装包损失或毁坏&#xff0c;参考VS2015安装过程中安装包丢失或损坏解决办法 卡在哪个搜索文件上就找到哪个文件再继…

【100天精通python】Day15:python 第三方模块和包,模块如何以主程序形式执行

目录 1 常用的第三方模块 2. 第三方模块的安装和使用 2.1 安装第三方模块&#xff1a; 2.2 导入第三方模块&#xff1a; 2.3 使用第三方模块&#xff1a; 3 模块以主程序形式执行 4 python 中的包 4.1 python程序的包结构 4.2 创建包 4.3 python中包的导入和使用 5 …

lama cleaner

这里写自定义目录标题 安装参数包含的额外plugins 安装 conda create --name lamacleaner python3.10 pip install -r requirements.txt pip install gfpgan pip install realesrgan pip install rembg pip install .如果安装本package报错&#xff0c;可以尝试改&#xff1…

【安全】web中的常见编码浅析浏览器解析机制

目录 常见编码 一、ASCII码 二、URL编码 三、Unicode编码 四、HTML实体编码 结合编码理解浏览器解析机制 常见编码 一、ASCII码 ASCII (American Standard Code for Information Interchange&#xff0c;美国信息交换标准代码&#xff09; 计算机内部&#xff0…