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.mzph.cn/news/8124.shtml

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

相关文章

手机照片误删除?无需担忧,点击这里,即可轻松恢复

手机照片误删除?无需担忧,点击这里,即可轻松恢复 开头:在数字化时代,手机已成为我们生活中不可或缺的伙伴。随着手机摄影的普及,我们记录了许多珍贵的瞬间和回忆。然而,有时候我们不小心误删除…

Python编译过程和执行原理

hello,这里是Token_w的文章,主要讲解python的基础学习,希望对大家有所帮助 整理不易,感觉还不错的可以点赞收藏评论支持,感谢! 目录 一. Python执行原理二. Python内部执行过程2.1 编译过程概述2.2 过程图解…

遥感数字图像处理实验教程(韦玉春)--部分实验问题回答

个人的学习思考,仅供参考。 目录 实验三、图像合成和显示增强 一、目的 二、要求 三、实验 实验五、图像变换 一、目的 二、要求 三、实验 实验六、图像滤波 一、目的 二、要求 三、实验 实验七、图像分割 一、目的 二、要求 三、实验 实验八、图…

linux判断端口是否占用(好用)

netstat 一般的话使用 netstat -tunlp | grep xxx参数作用-t指明显示TCP端口-u指明显示UDP端口-l仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序)-p显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。-n不进行…

爬虫002_python程序的终端运行_文件运行_ipython的使用---python工作笔记020

用python运行一个文件,就是要写一个.py结尾的文件 然后保存 然后直接cmd中,python 然后写上py文件的路径就可以了 然后看一下内容 看一下终端中运行,直接输入python进入python环境,然后写python代码 回车运行 退出可以用exit()

设计模式——单例模式

1 概述 单例模式就是保证一个类只有一个对象实例。 为了保证无法创建多余的对象实例,单例类中需要自己创建对象实例,并把自己的构造方法私有化以防止其他地方调用创建对象,且需要提供一个公共的方法给其他类来获取该单例类的实例。 同时单例…

Linux笔记——rpm与yum下载软件命令介绍

系列文章目录 Linux笔记——进程管理Linux笔记——进程管理与网络监控技术讲解Linux笔记——进程管理 Linux笔记——管道相关命令以及shell编程 Linux笔记——磁盘进行分区与挂载介绍 文章目录 系列文章目录 前言 一 RPM介绍 1.1 RPM简单介绍 1.2 RPM命令语法 1.2.1 …

数学建模学习(2):数学建模各类常用的算法全解析

一、评价类算法 常见的评价算法 1.层次分析法 基本思想 是定性与定量相结合的多准则决策、评价方法。将决策的有关元素分解成 目标层、准则层和方案层 ,并通过人们的 判断对决策方案的 优劣进行排序 ,在此基础上进行定性和定量分析。它把人的思维过程…

Python怎么实现模式匹配

什么是模式匹配 模式匹配是一种用于在数据中寻找特定模式或结构的技术。它可以用于识别、查找和提取符合特定模式要求的数据。 在计算机科学中,模式匹配通常用于字符串处理和数据分析领域。一些常见的模式匹配模式包括: 1. 字符串匹配:在一…

23 自定义控件

案例:组合Spin Box和Horizontal Slider实现联动 新建Qt设计师界面: 选择Widget: 选择类名(生成.h、.cpp、.ui文件) 在smallWidget.ui中使用Spin Box和Horizontal Slider控件 可以自定义数字区间: 在主窗口w…

Docker 单机/集群 部署 Nacos2.2.0

单机部署 1- 拉取镜像 docker pull nacos/nacos-server:v2.2.02- 准备挂载的配置文件目录和日志目录 日志目录(空目录):./nacos/logs配置文件:./nacos/conf/application.properties 从官网下载 nacos 压缩包:Release 2.2.0 (Dec 14, 2022…

18.背景轮播

背景轮播 html部分 <div class"container"><div class"slide active" style"background-image: url(./static/20180529205331_yhGyf.jpeg);"></div><div class"slide " style"background-image: url(./s…

【数据挖掘】使用 LSTM 进行时间和序列预测

一、说明 每天&#xff0c;人类在执行诸如过马路之类的任务时都会做出被动预测&#xff0c;他们估计汽车的速度和与汽车的距离&#xff0c;或者通过猜测球的速度并相应地定位手来接球。这些技能是通过经验和实践获得的。然而&#xff0c;由于涉及众多变量&#xff0c;预测天气或…

SpringCloudAlibaba微服务实战系列(二)Nacos配置中心

SpringCloudAlibaba Nacos配置中心 在java代码中或者在配置文件中写配置&#xff0c;是最不雅的&#xff0c;意味着每次修改配置都需要重新打包或者替换class文件。若放在远程的配置文件中&#xff0c;每次修改了配置后只需要重启一次服务即可。话不多说&#xff0c;直接干货拉…

NoSQL之 Redis配置与优化

文章目录 一.关系数据库与非关系型数据库1.关系型数据库2.非关系型数据库3.关系型数据库和非关系型数据库区别4.非关系型数据库产生背景 二.Redis简介1.了解Redis2.Redis 具有以下几个优点3.Redis为何这么快 三.Redis 安装及应用1.Redis 安装部署2.Redis 命令工具2.1 redis-cli…

会点C++还需要再学Python吗?

提到的C、数据结构与算法、操作系统、计算机网络和数据库技术等确实是计算机科学中非常重要的基础知识领域&#xff0c;对于软件开发和计算机工程师来说&#xff0c;它们是必备的核心知识。掌握这些知识对于开发高性能、可靠和安全的应用程序非常重要。Python作为一种脚本语言&…

运动蓝牙耳机什么牌子的好用、最好用的运动蓝牙耳机推荐

音乐是运动的灵魂&#xff0c;而一款优秀的运动耳机则是让音乐与我们的身体完美融合的关键。今天&#xff0c;我推荐五款备受运动爱好者喜爱的耳机&#xff0c;它们以卓越的音质、舒适的佩戴和出色的稳定性能脱颖而出&#xff0c;助你在运动中创造最佳状态。 1、NANK南卡Runne…

安全第一天

1. 编码 1.1 ASCLL编码 ASCII 是基于拉丁字母的一套电脑编码系统&#xff0c;主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准&#xff0c;并等同于国际标准ISO/IEC 646。 1.2 URL编码 URL&#xff1a;&#xff08;统一资源定位器、定位地址&#xff0c;俗称网页…

k8s常见的资源对象使用

目录 一、kubernetes内置资源对象 1.1、kubernetes内置资源对象介绍 1.2、kubernetes资源对象操作命令 二、job与cronjob计划任务 2.1、job计划任务 2.2、cronjob计划任务 三、RC/RS副本控制器 3.1、RC副本控制器 3.2、RS副本控制器 3.3、RS更新pod 四、Deployment副…

概率论的学习和整理21:用EXCEL来做假设检验(未完成草稿)

目录 1 EXCEL可以用来做假设检验 1.1 如何打开 数据分析 和 规划求解 1.2 EXCEL里关于正态分布的准备知识 2 基本的假设检验 2.1 最基本的假设检验&#xff0c;单边的Z检验 2.1 双样本F检验 2.1.1 例题 2.1.2 进行F检验之前需要满足一些假设条件 2.1.3 计算步骤 2.1…