Kafka_01_Kafka初识

Kafka_01_Kafka初识

  • Kafka
    • 基础概念
    • 延迟任务

Kafka

Kafka: ZooKeeper协调的分布式消息系统

  1. 基于Scala语言编写的高性能、多分区、多副本
  2. Kafka高性能的原因:页缓存、顺序IO、零拷贝

具有以下特性:

  1. 消息中间件: 系统解耦、冗余存储、流量消峰、异步通信等
  2. 存储系统: 通过消息持久化和多副本机制实现消息落盘
  3. 流处理: 为流式处理框架提供可靠的数据来源和库

Kafka组成: 若干个Producer、Consumer、Broker和ZooKeeper集群

  1. Producer(生产者): 生产并发送消息到Broker(推送)
  2. Consumer(消费者): 从Broker订阅并消费消息(拉取)
  3. Broker(服务代理节点): 将从Producer收到的消息进行落盘
  4. ZooKeeper集群:管理Kafka集群的元数据

// Broker可看成单个独立的Kafka服务实例, 多个Broker组成个Kafka集群


如: Kafka集群构成

image


基础概念

主题(Topic): Kafka中消息归类单位

  1. Topic并不实际存在(仅逻辑上的概念)
  2. Topic可细分为多个Partition, 但Partition仅属于单个Topic
  3. 功能: Producer将消息发送到特定Topic, Consumer订阅Topic消费消息

分区(Partition): 组成Topic的单位(实际存储消息)

  1. Partition在存储层面可视为: 可被追加的日志文件
  2. 同一Topic下的不同Partition包含的消息是不同的
  3. Partition可跨Broker(Topic可跨Broker)

偏移量(Offset): 消息追加到Partition时分配的标志位

  1. Offset是消息在Partition中的唯一标识(保证Partition内的有序性)
  2. Offset不支持跨Partition(Topic无序)

如: 消息追加写入Partition

image

  1. 消息在发送到Broker之前, 都会先根据Partition规则分配到具体的Partition
  2. Topic的Partition应避免都属于单个文件(避免机器的I/O成为性能瓶颈)

Partition中2个特殊的Offset:

  1. HW(High Watermark): Consumer能拉取到消息的最大Offset
  2. LEO(Log End Offset): Partition下条消息写入的Offset

// ISR中最小的LEO为该Partition的HW(最慢的follower)


如: Partition中的特殊Offset

image


副本(Replica): Partition的冗余

  1. 功能: Kafka通过多副本机制提高容灾能力
  2. 副本之间分为:leader(主副本)、follower(从副本)
  3. 副本间仅存在一主多从关系, 且可实现自动故障转移
  4. Producer和Consumer只能和leader进行交互(follower仅进行消息同步)

如: Kafka的多副本交互

image


副本相关名词:

  1. AR(Assigned Replicas): 所有副本(包括leader)
  2. ISR(In-Sync Replicas): 与leader保持同步的副本(包括leader)
  3. OSR(Out-of-Synce Replicas): 与leader同步滞后过多的副本(数据不同步)

// 默认仅ISR中的副本才有资格选举为leader, 且负责动态管理ISR和OSR中的follower


延迟任务

时间轮(TimeingWheel): 以固定时间粒度为单位管理和调度事件的数据结构

  1. 时间跨度(tickMs): 时间轮构成的基本单位, 个数固定
  2. 表盘指针(currentTime): 指向当前所处的时间粒度
  3. 时间轮对于插入/删除操作的时间复杂度为O(1)

定时器(SystemTimer): Kafka中各类延迟操作的触发

  1. 本质: 基于时间轮机制和数组构成的环形队列
  2. 定时任务项(TimerTaskEntry): 封装真正的定时/延迟任务(Task)
  3. 定时任务列表(TimerTaskList): 存放时间粒度下所有TimerTaskEntry的双向链表

如: 定时器构成结构

image

  1. 当添加TimerTaskEntry时, 会根据过期时间和currentTime算出应插入的TimerTaskList
  2. 当计算结果超出总tickMs时, 会复用之前的TimerTaskList
  3. TimerTaskList中都有个哑元节点方便操作(不存储数据)

层级时间轮(Hierarchical TimeingWheel): 分层处理不同tickMs的多级时间轮的组合结构

  1. 本质: 通过划分每个时间轮处理的时间范围, 以保证时间轮的高性能
  2. 升级: 当TimerTaskEntry的过期时间超出本层的时间范围时, 将交由上层时间轮
  3. 降级: 当TimerTaskEntry在高层时间轮中过期时, 会将其减少已过的时间并重新提交到层级时间轮
  4. TimerTask仅能由最底层的时间轮负责执行处理, 高层的时间轮仅根据时间粒度负责其的编排和重新提交

// Kafka中通过DelayQueueExpiredOperationReaper线程实现时间的推进(避免空转造成的性能浪费)


如: 层级时间轮

image

  1. 层级时间轮创建时会以当前系统时间作为最底层时间轮的起始时间(startMs)
  2. 高层时间轮的起始时间都为创建时上一层时间轮的currentTime
  3. 每层时间轮的currentTIme都必须是tickMs的整数倍
  4. Kafka仅持有最底层时间轮的引用

延迟操作管理器(DelayedOperationPurgatory, DOP): 管理/执行Kafka中各类延迟操作

  1. 每个DOP都对应个定时器(超时管理)和监听池(监听Partition事件)
  2. 当进行延迟拉取时, 会读取两次日志文件并等待足够数量的消息才会返回

如: Producer的延迟操作

image


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

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

相关文章

C++的面向对象学习(7):面向对象编程的三大特性之:继承

文章目录 前言一、继承:继承的类除了拥有上一级类的共性,也拥有自己的特性。二、继承方式:公有继承(public inheritance)、私有继承(private inheritance)和保护继承(protected inhe…

C练习——爱因斯坦台阶问题(穷举法)

题目:爱因斯坦曾经提出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩下1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩下4阶;若每步上6阶,最后剩5…

排序算法讲解

1)排序思想: 2)排序代码: 3)注意点: 4)时间/空间复杂度和稳定性 下面的排序是以实现升序讲解的。 (一)直接插入排序 1)排序思想: 把待排序的…

Java注解学习,一文掌握@Autowired 和 @Resource 注解区别

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

Python教程(19)——python异常处理

异常处理 什么是异常异常处理方式try-except语句捕获异常类型 相关的异常类型 什么是异常 在计算机编程中,异常(Exception)是指在程序执行过程中发生的错误或异常情况。当出现异常时,程序无法正常继续执行,因此需要采…

【Java进阶篇】SimpleDateFormat是线程安全的吗? 使用时应该注意什么?

SimpleDateFormat是线程安全的吗?使用时应该注意什么? ✔️ 典型解析✔️拓展知识仓✔️SimpleDateFormat用法✔️日期和时间模式表达方法✔️输出不同时区的时间✔️SimpleDateFormat线程安全性✔️问题重现✔️线程不安全原因✔️如何解决✔️使用局部变量✔️加同步锁✔️…

Java Log 学习笔记

参考文章: 1.Java 日志从入门到实战 2.Java日志框架的发展历史,你不想了解一下吗 背景 想自定义 logback 配置文件进行日志分级别记录到不同文件,遇到了几个问题(使用的是 spring-boot 构建的项目,spring-boot 版本为…

深度学习从入门到不想放弃-5

看了一眼这个文章系列,居然第四集是11月5号写的,这25天可见发生了多少事情... 今天我们讲讲特征,算是基础篇的一个番外篇延伸,我省着在后面的文章里写了,怕扰乱了思路 严格来说这个属于基础机器学习领域里的了,我又不讲决策树,贝叶斯,隐马尔可夫啥的(不在这个系列写,…

OPenGL GLSL

shji 数据类型 整型(有符号/无符号) 浮点数(单精度) 布尔值 向量类型/矩阵类型 bool bDone false int value 1; unint vale 21u float value 2.1 向量/分量类型 vec2,vec3,vec4 2分量 3 分量 4 分量复电向量 i…

机器学习---随机森林宫颈癌分类

1. 宫颈癌分类 from sklearn import tree from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split from sklearn.model_selection import GridSearchCV from sklearn.pipeline import Pipeline from sklearn.preprocessi…

VistualStudio查看类图UML

点击菜单栏中的工具–》获取工具和功能。 然后在资源管理器中对应的代码中鼠标右键选择查看类图 生成一个ClassDiagram.cd文件就是类图的文件了。 根据需要拖拽就可以生成类图了。

常用的 MySQL 可视化客户端

数据库可视化客户端(GUI)让用户在和数据库进行交互时,能直观地查看、创建和修改对象,如:表、行和列。让数据库操作变得更方便了。 今天,我们来了解下目前市场上最常用的 MySQL 可视化客户端。 官方&#x…

数据结构期末复习(2)链表

链表 链表(Linked List)是一种常见的数据结构,用于存储一系列具有相同类型的元素。链表由节点(Node)组成,每个节点包含两部分:数据域(存储元素值)和指针域(指…

vscode配置的C++环境

目录 1、下载并安装VScode 2、下载MinGW 3、配置MinGW 3.1添加环境变量 3.2 Vscode配置 3.3测试 1、下载并安装VScode Visual Studio Code - Code Editing. Redefined 2、下载MinGW 在MinGW官网MinGW-w64 - for 32 and 64 bit Windows - Browse /mingw-w64/mingw-w64-r…

List集合格式转换

最近遇到一个任务: 需要把A集合数据转成 B集合的形式: A集合: B集合: 代码: package com.example.juc.test;import com.example.juc.entity.Ld; import com.example.juc.entity.Student;import java.lang.reflect.F…

【Petalinux】制作SD卡 操作系统 启动

Vivado 添加 SD0 导出hdf 制作SD卡 https://mathd.blog.csdn.net/article/details/135217761 【Petalinux】下为空白SD卡建立BOOT,rootfs分区 Petalinux 生成 Petalinux 框架 petalinux-create --type project --template zynq --name sdtest进入 sdtest 文件…

Ksher H5页面支付实例指导 (PHP实现)

前文 背景介绍 前两天,公司的项目,为了满足泰国客户的支付需求,要求使用 Ksher (开时支付) 对接任务突然就给了鄙人,一脸懵 … 通过了解客户的使用场景、以及参考官网指导 发现:Ksher支付 最令人满意的便是 —— 提供了…

【网络安全/CTF】easyphp 江苏工匠杯

本题考察PHP语言相关绕过知识 正文 开门见山给代码 <?php highlight_file(__FILE__); $key1 0; $key2 0;$a $_GET[a]; $b $_GET[b];if(isset($a) && intval($a) > 6000000 && strlen($a) < 3){if(isset($b) && 8b184b substr(md5($b),…

【Java】如何给你的图片添加自定义水印(附完整代码)?

这是一篇关于怎么尽可能的用尽你电脑里的所有字体给你的图片加水印。。。。 先上效果~ 当然这只是其中一部分字体&#xff0c;&#xff0c;&#xff0c;我也是今天才发现我电脑里居然装了那么多字体 好了废话不多说直接上完整代码~ import io.swagger.models.auth.In;import …

循环生成对抗网络(CycleGAN)

一、说明 循环生成对抗网络&#xff08;CycleGAN&#xff09;是一种训练深度卷积神经网络以执行图像到图像翻译任务的方法。网络使用不成对的数据集学习输入和输出图像之间的映射。 二、基本介绍 CycleGAN 是图像到图像的翻译模型&#xff0c;就像Pix2Pix一样。Pix2Pix模型面临…