当前位置: 首页 > news >正文

初始Kafka

1、Kafka是什么?

Kafka是由Scala语言开发的一个多分区、多副本,基于Zookeeper集群协调的系统。

那这个所谓的系统又是什么系统呢?

回答这个问题要从发展的角度来看:起初Kafka的定位是分布式消息系统。但是目前它的定位是一个分布式流式处理平台,用于实时数据集成和流数据处理。

2、Kafka都可以扮演哪些“角色”?

基于Kafka的发展和特性,它可以在我们的实际工作当中扮演以下几个“角色”:

  • 消息系统
  • 存储系统:将消息持久化到磁盘上。
  • 流式处理平台:可以集成多种流式处理框架(例如:SparkStream、Flink等),不但可以作为可靠的数据源,同时提供了一套完整的流处理类库,例如:窗口、连接、交换和聚合等操作。

3、Kafka的体系架构?

Kafka体系架构包括:生产者(Producer)、消费者(Consumer)、服务代理节点(Broker)、一个Zookeeper集群。

  • 生产者(Producer)

    作为消息的发送方。负责创建消息,并将消息发送给Broker。

  • 消费者(Consumer)

    作为消息的接收方。负责连接Kafka并接收消息,进而进行相应的逻辑处理。

  • 代理服务节点(Broker)

    可以看做一个Kafka实例,多个Broker组成一个Kafka集群。

  • Zookeeper集群

    Zookeeper用来负责Kafka集群的元数据管理和控制器的选举等操作。

让我们进一步来描述Producer、Consumer、Broker之间的关系以及作用:

Producer创建消息并将消息发送给Borker,Broker将接收到的消息存储到本地的磁盘上,Consumer负责在Broker上订阅并消费消息。

4、主题、分区、副本

Kafka中有三个重要的概念,主题、分区和副本。它们之间的关系如下图:
在这里插入图片描述
通过上图我们可以得知:

1个主题对应多个分区;一个分区对应多个副本;副本又分为一个leader副本和多个follower副本。

4.1、主题

  1. 主题是一个逻辑概念,我们可以把它当做消息的分类。
  2. Producer发送消息的时候会指明该消息所属的主题(即可以理解为Producer是将消息发送给了主题),一个消息只属于一个主题。

4.2、分区

  1. 一个主题下会细分为多个分区,每个分区对应一个主题。
  2. 消息在分区中的以offset(偏移量)作为唯一标识
  3. Kafka通过offset来保证消息在分区中的顺序。
  4. offset不能跨区,所以我们说分区是有序的,而主题是无序
  5. 分区可以分布在不同的broker上。

4.3、副本

  1. 一个分区会有多个副本,副本中的消息都是一致的(同一时刻可能会有不一致的情况)。

  2. 副本之间的关系是“一主多从”,即一个leader副本和多个follower副本。

    • leader副本:负责消息的读写。
    • follower副本:负责同步leader副本。
  3. 副本被分布到不同的broker上,leader副本挂掉了,会从follower副本中重新选举出一个新的leader副本。

  4. 我们将分区中所有副本统称为AR(Assigned Replicas)。其中一些与leader副本保持一定程度同步的副本(包括leader副本本身)统称为ISR(In-Sync Replicas)。而另外一些相较于leader副本滞后很多的副本统称为OSR(Out-of-Sync Replicas)

    由此可见,AR = ISR + OSR。正常情况下,所有follower副本都要与leader版本保持一定程度的同步,即AR = ISR,而OSR集合为空。

  5. 默认情况下,leader副本只能从ISR中的副本中选举出来。但是我们可以通过参数配置使得OSR中的副本也有机会被选举为leader副本。

  6. leader副本还负责所有follower副本滞后状态的维护和跟踪,即当follower副本滞后较多的时候会将它从ISR中移动到OSR中,也会将OSR中追上leader副本的follower副本移动到ISR中。

  7. 特定偏移量HW和LEO。

    • 针对分区有一个概念为高水位(High Watermark,缩写HW),它是一个特定的消息偏移量(offset),消费者只能接收到offset之前的消息
    • ISR中的每个follower副本都维护一个自己的LEO(Log End Offset),它也是一个特定的消息偏移量(offset),即待写入消息的偏移量。

在这里插入图片描述

  1. HW与LEO之间的关系,如下图:
    在这里插入图片描述
    通过上图我们可以得知:分区的HW是通过ISR中最小的LEO得出的

4.4、如何避免Consumer宕机重启后的消息丢失?

Consumer是通过拉(Pull)模式从服务端拉取消息的,同时会在Consumer端记录下消费的具体位置,当Consumer宕机重启后会根据之前记录的消费位置重新拉取需要的信息进行消费。

相关文章:

初始Kafka

1、Kafka是什么? Kafka是由Scala语言开发的一个多分区、多副本,基于Zookeeper集群协调的系统。 那这个所谓的系统又是什么系统呢? 回答这个问题要从发展的角度来看:起初Kafka的定位是分布式消息系统。但是目前它的定位是一个分布…...

学会使用maven工具看这一篇文章就够了

文章目录 概述一、定义与功能二、核心组件三、主要作用四、仓库管理 settings.xml说明一、文件位置与优先级二、主要配置元素三、配置示例 pom.xml文件说明一、pom.xml的基本结构二、pom.xml的主要元素及其说明三、依赖管理四、常用插件五、其他配置 maven安装配置一、下载Mave…...

如何创建虚拟环境并实现目标检测及验证能否GPU加速

创建虚拟环境: 先创建一个虚拟python环境,敲如下代码 然后再到该虚拟环境里面安装自己想要的包 激活虚拟环境 然后再聚类训练这些 验证GPU加速 阿里源 pip install torch torchvision -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mir…...

<STC32G12K128入门第十三步>驱动W5500进行TCP_Client通信

前言 最近本人接触到了一个消费类产品需要用到以太网,并且需要连接服务器,同时需要发送https协议。本文就是讲解如何运行TCP客户端, 一、W5500讲解? W5500是一款10/100M的以太网转换芯片,内部集成了TCP/IP协议栈。并且支持SPI/I2C协议。我在STC32上面使用的是软件SPI。…...

【Go语言】Ergo:构建分布式系统的现代化 Erlang 框架

Ergo 是一个基于 Go 语言的开源框架,专门用于构建分布式系统。它为开发人员提供了与 Erlang/OTP 类似的编程模型和功能。Ergo 通过将 Erlang 的强大分布式并发编程模型带入 Go 语言的生态中,使得开发者能够轻松创建高度可靠、可扩展的分布式应用程序。 …...

教资备考--高中数学(仅为高中数学梳理)

按照高中学习数学梳理的方案进行整理...

Qt 学习第十一天:QTableWidget 的使用

一、创建QTableWidget对象,设置大小,在窗口的位置 //创建tablewidgetQTableWidget *table new QTableWidget(this);table->resize(550, 300);table->move(100, 100); //移动 二、设置表头 //设置表头QStringList headerList; //定义headerList…...

【Linux】基础指令 1

Linux中各个指令是相互联系的,所以一开始学习Linux时,对指令很陌生是正常的,不用花费大量的时间去刻意的记忆,在我们一次次的使用当中,这些指令自然会烂熟于心。 简单看看各个指令的功能 ls指令 显示当前目录下的文…...

Linux_kernel字符设备驱动12

一、字符设备的编程框架 在Linux_kernel驱动开发11中,我们介绍的系统调用。只是为了做一个实验,在真正开发时,我们并不会直接在内核中添加一个新的系统调用,这样做会导致内核体积变大。 1、字符设备结构体 我们实现一个硬件字符设…...

服务保护sentinel

线程隔离 - 线程池隔离:给每个服务调用业务分配一个线程池,利用线程池本身实现隔离效果。 - 信号量隔离:不创建线程池,而是计数器模式,记录业务使用的线程数量,达到信号量上限时,禁止新的请求。…...

【ubuntu】Ubuntu20.04安装中文百度输入法

1.download 百度Linux输入法-支持全拼、双拼、五笔 2.unzip unzip Ubuntu_Deepin-fcitx-baidupinyin-64.zip 3.setting 3.1 setting fcitx sudo apt install aptitude sudo aptitude install fcitx-bin fcitx-table fcitx-config-gtk fcitx-frontend-all sudo aptitude in…...

蓝桥杯【物联网】零基础到国奖之路:十八. 扩展模块之光敏和AS312

蓝桥杯【物联网】零基础到国奖之路:十八.扩展模块之光敏和AS312 第一节 硬件解读第二节 CubeMX配置第二节 代码 第一节 硬件解读 光敏和AS312如下图: 光敏电阻接到了扩展模块的5号引脚,5号引脚接了2个电阻,R8和光敏电阻。我们通过ADC读取这…...

如何在微信小程序中实现分包加载和预下载

如何在微信小程序中实现分包加载和预下载 概述 微信小程序提供了分包加载和预下载功能,这有助于优化应用的加载时间,提升用户体验。本文将详细介绍如何在微信小程序中配置分包加载和预下载。 步骤一:配置分包加载 修改app.json文件&#x…...

初识TCP/IP协议

回顾上文 来回顾一下TCP协议的特性,有一道比较经典的题:如何使用UDP实现可靠传输,通过应用程序的代码,完成可靠传输的过程? 原则,TCO有啥就吹啥,引入滑动窗口,引入流量控制&#x…...

使用 classification_report 评估 scikit-learn 中的分类模型

介绍 在机器学习领域,评估分类模型的性能至关重要。scikit-learn 是一个功能强大的 Python 机器学习工具,提供了多种模型评估工具。其中最有用的函数之一是 classification_report,它可以全面概述分类模型的关键指标。在这篇文章中&#xff…...

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(十)高翔书中的细节:参考链接;卫星导航;ESKF

一、 参考链接 我认真查找了好多地方:结果在最后一页。 作者GITHUB链接如下: https://github.com/gaoxiang12/slam_in_autonomous_driving 全书所有参考链接 :如下 1 https://www.sae.org/standards/content/j3016_202104 2 http://www.evinchina.com/articleshow-217.htm…...

【在Python中爬取网页信息并存储】

在Python中爬取网页信息并存储的过程通常涉及几个关键步骤:发送HTTP请求、解析HTML内容、提取所需数据,以及将数据存储到适当的格式中(如文本文件、CSV文件、数据库等)。以下是一个更详细的指南,包括示例代码&#xff…...

ESP32 Bluedroid 篇(1)—— ibeacon 广播

前言 前面我们已经了解了 ESP32 的 BLE 整体架构,现在我们开始实际学习一下Bluedroid 从机篇的广播和扫描。本文将会以 ble_ibeacon demo 为例子进行讲解,需要注意的一点是。ibeacon 分为两个部分,一个是作为广播者,一个是作为观…...

【通配符】粗浅学习

1 背景说明 首先要注意,通配符中的符号和正则表达式中的特殊符号具备不同的匹配意义,例如:*在正则表达式中表示里面是指匹配前面的子表达式0次或者多次,而在通配符领域则是表示代表0个到无穷个任意字符。 此外,要注意…...

Spring MVC 常用注解

目录 基础概念 常用注解介绍 基础概念 1、MVC :代表一种软件架构设计思想,通俗的理解:客户端发送请求到后台服务器的Controller(C),控制器调用Model(M)来处理业务逻辑,处理完成后,返回处理后的数据到Vie…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...