【大数据】Kafka 入门指南

2023-10-31

1.Kafka 简介

Apache Kafka 是一种高吞吐、分布式的流处理平台,由 LinkedIn 开发并于 2011 年开源。它具有 高伸缩性高可靠性低延迟 等特点,因此在大型数据处理场景中备受青睐。Kafka 可以处理多种类型的数据,如事件、日志、指标等,广泛应用于 实时数据流处理、日志收集、监控和分析 等领域。

通常用作消息队列和流处理,作为消息队列的时候,竞品有 RabbitMQActiveMQRocketMQApache Pulsar 等。

2.Kafka 架构

下面介绍一下 Kafka 架构中最重要的三个参与者:

  • Producer生产者):生产者负责将消息发送到 Kafka 集群。
  • Consumer消费者):消费者负责从 Kafka 集群中拉取并消费消息。
  • Broker代理节点):Broker 是 Kafka 集群中的一个服务代理节点,可以看作是一台服务器。Kafka 集群通常由多个 Broker 组成,以实现负载均衡和容错。

在这里插入图片描述

3.分区与副本

Kafka 为了对消息进行分类,引入了 Topic主题)的概念。生产者在发送消息的时候,需要指定发送到某个 Topic,然后消息者订阅这个 Topic 并进行消费消息。

Kafka 为了提升性能,又在 Topic 的基础上,引入了 Partition分区)的概念。Topic 是逻辑概念,而 Partition 是物理分组。一个 Topic 可以包含多个 Partition,生产者在发送消息的时候,需要指定发送到某个 Topic 的某个 Partition,然后消息者订阅这个 Topic 并消费这个 Partition 中的消息。

Kafka 为了提高系统的吞吐量和可扩展性,把一个 Topic 的不同 Partition 放到多个 Broker 节点上,充分利用机器资源,也便于扩展 Partition。

Kafka 为了保证数据的安全性和服务的高可用,又在 Partition 的基础上,引入 Replica副本)的概念。一个 Partition 包含多个 Replica,Replica 之间是一主多从的关系,有两种类型 Leader Replica领导者副本)和 Follower Replica跟随者副本),Replica分布在不同的Broker节点上。

Leader Replica 负责读写请求,Follower Replica 只负责同步 Leader Replica 数据,不对外提供服务。当 Leader Replica 发生故障,就从 Follower Replica 选举出一个新的 Leader Replica 继续对外提供服务,实现了故障自动转移。

下图展示的是,同一个 Topic 的不同 Partition 在 Broker 节点的分布情况:

在这里插入图片描述
Kafka 为了提升 Replica 的同步效率和数据写入效率,又对 Replica 进行分类。针对一个 Partition 的所有 Replica 集合统称为 ARAssigned Replicas已分配的副本),包含 Leader Replica 和 Follower Replica。与 Leader Replica 保持同步的 Replica 集合称为 ISRIn-Sync Replicas同步副本),与 Leader Replica 保持失去同步的 Replica 集合称为 OSROut-of-Sync Replicas失去同步的副本),AR = ISR + OSR

Leader Replica 将消息写入磁盘前,需要等 ISR 中的所有副本同步完成。如果 ISR 中某个 Follower Replica 同步数据落后 Leader Replica 过多,会被转移到 OSR 中。如果 OSR 中的某个 Follower Replica 同步数据追上了 Leader Replica,会被转移到 ISR 中。当 Leader Replica 发生故障的时候,只会从 ISR 中选举出新的 Leader Replica。

4.偏移量

Kafka 为了记录副本的同步状态,以及控制消费者消费消息的范围,于是引入了 LEOLog End Offset日志结束偏移量)和 HWHigh Watermark高水位)。

  • LEO 表示分区中的下一个被写入消息的偏移量,也是分区中的最大偏移量。LEO 用于记录 Leader Replica 和 Follower Replica 之间的数据同步进度,每个副本中各有一份。
  • HW 表示所有副本(Leader 和 Follower)都已成功复制的最小偏移量,是所有副本共享的数据值。换句话说,HW 之前的消息都被视为已提交,消费者可以消费这些消息。用于确保消息的一致性和只读一次。

下面演示一下 LEO 和 HW 的更新流程:

(1)初始状态,三个副本中各有 0 和 1 两条消息,LEO 都是 2,位置 2 是空的,表示是即将被写入消息的位置。HW 也都是 2,表示 Leader Replica 中的所有消息已经全部同步到 Follower Replica 中,消费者可以消费 0 和 1 两条消息。

在这里插入图片描述
(2)生产者往 Leader Replica 中发送两条消息,此时 Leader Replica 的 LEO 的值增加 2,变成 4。由于还没有开始往 Follower Replica 同步消息,所以 HW 值和 Follower Replica 中 LEO 值都没有变。由于消费者只能消费 HW 之前的消息,也就是 0 和 1 两条消息。

在这里插入图片描述
(3)Leader Replica 开始向 Follower Replica 同步消息,同步速率不同,Follower1 的两条消息 2 和 3 已经同步完成,而 Follower2 只同步了一条消息 2。此时,Leader 和 Follower1 的 LEO 都是 4,而 Follower2 的 LEO 是 3,HW 表示已成功同步的最小偏移量,值是 3,表示此时消费者只能读到 0、1、2,三条消息。

在这里插入图片描述
所有消息都同步完成,三个副本的 LEO 都是 4,HW 也是 4,消费者可以读到 0、1、2、3,四条消息。

在这里插入图片描述

5.消费者组

Kafka 为了提高消息的处理效率,引入了消费者组的概念。一个 消费者组Consumer Group)包含多个消费者,一个消费者组可以同时订阅多个 Topic,一个 Topic 也可以同时被多个消费者组订阅。

为了保证同一个 Partition 的消息被顺序处理,针对一个消费者组,一个 Partition 的消息只会交给这个消息者组的一个消费者处理。

在这里插入图片描述

6.总结

本文简单介绍了 Kafka 架构,以及架构中涉及到底的一些名词概念,包括 Producer(生产者)、Consumer(消费者)、Broker(代理节点)、Topic(主题)、Partition(分区)、Leader Replica(领导者副本)、Follower Replica(跟随者副本)、LEOLog End Offset,日志结束偏移量)、HWHigh Watermark,高水位)、Consumer Group(消费者组)等。下篇文章再接着介绍 Kafka 如何解决消息丢失、重复消费、顺序消息、持久化消息、Leader 选举过程等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【大数据】Kafka 入门指南 的相关文章

  • 中国跨境电商品牌营销白皮书

    导读 报告显示 近年来 中国品牌在走向国际市场的过程中面临着诸多挑战 跨文化 和 品牌形象接受度低 成为中国品牌在海外营销中的主要问题 由于国内外文化存在差异 中国品牌在营销方面遇到了困难 许多品牌往往照搬国内的广告模式 无法吸引国外消费者

随机推荐

  • SVG主要的画图元素以及几个基本的几何图形介绍

    本文主要介绍SVG画图中的两种主要画图元素 Path和Text 以及SVG的几个基本的几何形状 如线条 折线 多边形 椭圆 矩形 圆等等 本文主要采取理论 例子的方式来介绍 这种方式向来都是解释介绍的王道 同时也是学习的一种好方法 第一 首
  • 413 Request Entity Too Large

    一 字面意思是请求体太大 一般出现在上传文件 二 主要问题 Nginx默认最大能够上传1MB文件 大于1MB的文件自然无法上传 打开nginx conf 没权限找运维人员 在http 中设置 client max body size 50m
  • empire-web可视化

    首先说明我的安装系统为kali 教程同样适用于ubantu系统 1 首先安装Empire 没有安装的可以去先参考其他教程安装 2 下载empire web git clone https github com interference se
  • 【Python 笔记】Linux下安装pip方法的全总结

    本文研究记录了 Linux 下安装 pip 的全部方法 文章目录 1 通过 Linux 系统的包管理工具安装 1 1 apt 包管理工具安装 pip 1 1 1 安装 1 1 2 升级 1 1 3 issue5599 1 2 yum 包管理
  • 矩阵分解——谱分解

    文章目录 先修知识 幂等矩阵 谱分解定理 谱分解的流程 谱分解的推论 谱分解的应用 先修知识 幂等矩阵 谱分解定理 谱分解的流程 谱分解的推论 谱分解的应用
  • 浅析Bootstrap中Tab(标签页)的使用方法

    Bootstrap 导航元素使用相同的标记和基类 改变修饰的class 可以在不同的样式间进行切换 如 nav pills 胶囊式导航 与 nav tabs 标签式导航 创建一个标签式的导航菜单 以一个带有class nav 的无序列表开始
  • xxl-job任务操作源码分析(四)

    手动执行任务 页面上点击 执行 按钮 前端会发送一个请求 jobinfo trigger post 请求 param id 任务ID controller最终会调用service的方法进行处理 public ReturnT
  • 浅谈sql中的in与not in,exists与not exists的区别

    1 in和exists in是把外表和内表作hash连接 而exists是对外表作loop循环 每次loop循环再对内表进行查询 一直以来认为exists比in效率高的说法是不准确的 如果查询的两个表大小相当 那么用in和exists差别不
  • js遍历字典

    for var key in data html
  • eclipse使用pthread.h遇到“pthread_create”未定义的问题。

    解决方法 a 需要在编译时添加 lpthread参数 g XXXXX cpp lpthread o XXXXX o b 在eclipse中配置 project gt properties gt c c Build gt GCC C Link
  • 并行前缀加法器 verilog

    并行前缀加法器verilog实现 关于并行前缀加法器的介绍 请看这里 前缀网络用KS树 64位加法器的verilog实现如下 module cal union input g2 p2 g1 p1 output G P assign G g2
  • 用它调试线上 bug,真得劲

    webconsole webconsole 是 arthas 提供的 web 页面 它可以让用户在自己的电脑上 连接远程服务器的 arthas 执行命令 命令的执行方式和在服务器直接操作没有任何区别 webconsole 连接远程服务器成功
  • JS实现弹出子窗口并获取返回值功能

    最近一段时间 所做系统需要实现使用js弹出一个自定义窗口 并且获取窗口的返回值功能 经多方查询未能找到较好的示例 所以无奈之下自己开发了一个弹出式窗口 并稍微封装了一下 废话少说 上代码 父页面弹出窗口示例 c id click funct
  • 原码, 反码, 补码各类应用(转载,出处文末附有链接)

    一 机器数和真值 在学习原码 反码和补码之前 需要先了解机器数和真值的概念 1 机器数 一个数在计算机中的二进制表示形式 叫做这个数的机器数 机器数是带符号的 在计算机用一个数的最高位存放符号 正数为0 负数为1 比如 十进制中的数 3 计
  • 关于eclipse tomcat启动但项目无法启动

    1 报错信息 没有加载spring web引起tomcat自己有启动但是项目没有启动 具体的截图 可以清楚的看到tomcat虽然启动了 但是没有项目启动的信息 2 解决方法 我们在将项目添加至tomcat时会发现该项目并没有将web包加载
  • 解决ubuntu 上QT无法被输入中文的BUG

    项目场景 使用QT FOR ROS在Ubuntu上开发ROS项目 问题描述 不管如何切换输入法的中英文都无法在QT上输入中文 只能输入英文 我用的是fcitx 搜狗输入法 原因分析 我认为时因为缺少了一些依赖或者缺少了一些支持中文的包 解决
  • button效果:从右往左慢慢渐变

    题记 我们工作中会出现一些按钮需要用一些2D的效果 用css会发现很容易做到这样的效果 大部分的思路通过过渡 2D hover事件 以及overflow的之间配合实现button按钮的背景颜色的渐变效果 下边是相关的一些代码
  • AndroidManifest详解之Application(有图更好懂)

    能够包含的标签
  • 如何有效进行RLHF的数据标注?

    编者按 随着大语言模型在自然语言处理领域的广泛应用 如何从人类反馈进行强化学习 RLHF 已成为一个重要的技术挑战 并且RLHF需要大量高质量的人工数据标注 这是一个非常费力的过程 本文作者在数据标注领域具有丰富经验 他在本文深入探讨了RL
  • 【大数据】Kafka 入门指南

    Kafka 入门指南 1 Kafka 简介 2 Kafka 架构 3 分区与副本 4 偏移量 5 消费者组 6 总结 1 Kafka 简介 Apache Kafka 是一种高吞吐 分布式的流处理平台 由 LinkedIn 开发并于 2011