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

【1】 Kafka快速入门-从原理到实践

文章目录

    • 🔍 一、引言
    • 📜 二、Kafka 的历史
    • 🏗️ 三、Kafka 的核心结构
      • 🖥️ (一)Broker
      • 📋 (二)Topic
      • 📄 (三)Partition
      • 📤 (四)Producer
      • 📥 (五)Consumer
      • 🐒 (六)Zookeeper
    • 💡 四、Kafka 的重点概念
      • 📨 (一)消息
      • 📏 (二)偏移量(Offset)
      • 🔄 (三)副本(Replica)
      • 👥 (四)消费者组(Consumer Group)
      • 📝 (五)分区策略
    • 📈 五、Kafka 的重点使用场景
      • 💻 (一)大数据处理
      • 🌊 (二)实时流处理
      • 📄 (三)日志收集与聚合
      • 💬 (四)消息系统
    • 📋 六、Kafka 的工作模式
      • 🔌 (一)点对点模式
      • 📣 (二)发布/订阅模式
    • 🐍 七、Python 如何使用 Kafka 进行操作
      • 📥 (一)安装 Kafka-Python 库
      • 📤 (二)生产者示例
      • 📥 (三)消费者示例
      • 📝 (四)高级用法
    • 📋 八、总结

🔍 一、引言

在当今大数据和分布式系统的时代,消息队列扮演着至关重要的角色。Kafka 作为一款高性能、分布式的消息队列系统,广泛应用于众多企业级架构中。它能够处理海量的实时数据,实现系统间的松耦合,为大数据处理、实时流处理、日志收集等多种场景提供了强大的支持。本文将深入探讨 Kafka 的历史、核心结构、重点概念、使用场景、工作模式以及在 Python 中的使用方法,旨在为读者全面理解和应用 Kafka 提供丰富的知识和实践指导。

📜 二、Kafka 的历史

Kafka 最初由 LinkedIn 开发,旨在解决其内部大规模数据处理和实时消息传递的需求。随着时间的推移,Kafka 的高性能、可扩展性和可靠性等优点逐渐被业界认可,于 2011 年开源,并迅速成为 Apache 软件基金会的顶级项目。如今,Kafka 已经被众多知名企业广泛采用,如 Netflix、Uber、Airbnb 等,成为构建现代分布式系统不可或缺的一部分。

🏗️ 三、Kafka 的核心结构

🖥️ (一)Broker

Broker 是 Kafka 集群中的核心节点,负责存储和转发消息。一个 Kafka 集群可以包含多个 Broker,它们协同工作以实现高可用性和水平扩展性。每个 Broker 都有自己的唯一标识符,并且存储着一部分主题(Topic)的数据。

📋 (二)Topic

Topic 是消息的逻辑分类,类似于数据库中的表。生产者(Producer)将消息发送到特定的 Topic,而消费者(Consumer)则从 Topic 中订阅并接收消息。一个 Topic 可以被划分为多个分区(Partition),以实现并行处理和高吞吐量。

📄 (三)Partition

Partition 是 Topic 的物理细分,每个 Partition 是一个有序的、不可变的消息序列。消息在 Partition 中按照先进先出(FIFO)的顺序存储和读取。不同的 Partition 可以分布在不同的 Broker 上,从而实现数据的分布式存储和负载均衡。每个 Partition 都有一个主副本(Leader Replica)和多个从副本(Follower Replica),主副本负责处理读写请求,从副本用于数据备份和故障恢复。

📤 (四)Producer

Producer 是消息的生产者,它负责将消息发送到 Kafka 的 Topic 中。Producer 可以根据指定的分区策略将消息发送到特定的 Partition,例如基于消息的键值进行哈希分区,或者按照轮询的方式将消息均匀分布到各个 Partition。

📥 (五)Consumer

Consumer 是消息的消费者,它从 Kafka 的 Topic 中订阅并接收消息。多个 Consumer 可以组成一个消费者组(Consumer Group),同一消费者组中的 Consumer 共同消费一个 Topic 中的消息,每个 Partition 只能被同一个消费者组中的一个 Consumer 消费,这样可以实现消息的负载均衡和水平扩展。消费者通过定期向 Kafka 集群发送心跳来维持其在消费者组中的成员资格,并获取新的消息。

🐒 (六)Zookeeper

Zookeeper 在 Kafka 集群中起着协调和管理的作用。它负责维护集群的元数据信息,如 Broker 的注册信息、Topic 的配置信息、Partition 的分配信息以及消费者组的状态信息等。Kafka 依赖 Zookeeper 实现集群的动态扩展、故障恢复和负载均衡等功能。

💡 四、Kafka 的重点概念

📨 (一)消息

消息是 Kafka 中数据传输的基本单元,它由键(Key)、值(Value)和时间戳(Timestamp)等组成。键可以用于指定消息的分区策略,值则是实际传输的数据内容。时间戳记录了消息产生的时间,对于一些基于时间的操作和处理非常重要。

📏 (二)偏移量(Offset)

偏移量是消费者在 Partition 中消费消息的位置标记。消费者通过记录自己消费到的偏移量,可以在下次启动时从上次停止的位置继续消费,从而实现消息的持久化消费和故障恢复。偏移量是一个单调递增的整数,每个 Partition 都有自己独立的偏移量序列。

🔄 (三)副本(Replica)

如前所述,Kafka 的 Partition 有主副本和从副本之分。主副本负责处理读写请求,从副本则不断从主副本同步数据,以保持数据的一致性。当主副本所在的 Broker 发生故障时,Kafka 会自动从从副本中选举一个新的主副本,从而保证服务的可用性。

👥 (四)消费者组(Consumer Group)

消费者组是 Kafka 实现消费者负载均衡和水平扩展的重要机制。同一消费者组中的消费者共同消费一个 Topic 的消息,每个 Partition 只能被同一个消费者组中的一个消费者消费。不同消费者组之间相互独立,它们可以同时消费同一个 Topic 的消息,从而实现不同

相关文章:

【1】 Kafka快速入门-从原理到实践

文章目录 🔍 一、引言📜 二、Kafka 的历史🏗️ 三、Kafka 的核心结构🖥️ (一)Broker📋 (二)Topic📄 (三)Partition📤 (四)Producer📥 (五)Consumer🐒 (六)Zookeeper💡 四、Kafka 的重点概念📨 (一)消息📏 (二)偏移量(Offset)🔄 (…...

go语言中的map类型详解

在Go语言中,map是一种内建的数据结构,提供了键值对(key-value)的存储方式。map通常用于实现快速的查找和关联数组,适合在需要根据键来高效查找值的场景下使用。 基本概念 map是一个无序的集合,它存储了键…...

GBase 8a MPP Cluster V9安装部署

GBase 8a MPP Cluster V9安装部署 安装环境准备 节点角色操作系统地址配置GBASE版本gbase01.gbase.cnGCWARE,COOR,DATACentOS 7.9192.168.20.1422C4GGBase 8a MPP Cluster V9 9.5.3.28.12gbase02.gbase.cnGCWARE,COOR,DATACentOS 7.9192.168.20.1432C4GGBase 8a MPP Cluster …...

静态库、动态库、framework、xcframework、use_frameworks!的作用、关联核心SDK工程和测试(主)工程、设备CPU架构

1.1库的概念 库:程序代码的集合,编译好的二进制文件加上头文件供使用,共享程序代码的一种方式。 1.2库的分类 根据开源情况分为:开源库(能看到具体实现)、闭源库(只公开调用的的接口&#xf…...

C++ | Leetcode C++题解之第552题学生出勤记录II

题目&#xff1a; 题解&#xff1a; class Solution { public:static constexpr int MOD 1000000007;vector<vector<long>> pow(vector<vector<long>> mat, int n) {vector<vector<long>> ret {{1, 0, 0, 0, 0, 0}};while (n > 0) {…...

网站架构知识之Ansible(day020)

1.Ansible架构 Inventory 主机清单:被管理主机的ip列表,分类 ad-hoc模式: 命令行批量管理(使用ans模块),临时任务 playbook 剧本模式: 类似于把操作写出脚本,可以重复运行这个脚本 2.修改配置 配置文件&#xff1a;/etc/ansible/ansible.cfg 修改配置文件关闭主机Host_key…...

K8s使用nfs

改动点 ip和路径改为自己的 --- apiVersion: v1 kind: ServiceAccount metadata:name: nfs-client-provisioner# replace with namespace where provisioner is deployednamespace: nfs-client --- kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata:nam…...

【大数据学习 | kafka高级部分】kafka的kraft集群

首先我们分析一下zookeeper在kafka中的作用 zookeeper可以实现controller的选举&#xff0c;并且记录topic和partition的元数据信息&#xff0c;帮助多个broker同步数据信息。 在新版本中的kraft模式中可以这个管理和选举可以用kafka自己完成&#xff0c;而不再依赖zookeeper。…...

爬虫策略规避:Python爬虫的浏览器自动化

网络爬虫作为一种自动化获取网页数据的技术&#xff0c;被广泛应用于数据挖掘、市场分析、竞争情报等领域。然而&#xff0c;随着反爬虫技术的不断进步&#xff0c;简单的爬虫程序往往难以突破网站的反爬虫策略。因此&#xff0c;采用更高级的爬虫策略&#xff0c;如浏览器自动…...

Hive 实现查询用户连续三天登录记录

标题&#xff1a;Hive 实现查询用户连续三天登录记录 在数据分析和处理中&#xff0c;经常会遇到需要查询特定条件数据的情况。本文将介绍如何使用 Hive 来查询用户连续三天登录的所有数据记录。 一、问题背景 我们有一个用户登录记录表&#xff0c;其中包含用户的登录日期信…...

OceanBase 4.3.3 功能解析:列存副本

OceanBase 从4.3.0 版本开始&#xff0c;引入了列式存储的支持。用户可以根据业务的具体需求&#xff0c;选择创建列存表、行存表或是行列混存表。无论选择哪种表类型&#xff0c;在不同的Zone内&#xff0c;租户使用的副本模式都是一致的。详见官网文档&#xff1a; https://w…...

2.Python解释器

python解释器程序&#xff0c;用来翻译python代码&#xff0c;并提交给计算机执行。 上一篇博客就是安装了python解释器程序 写一个python文件&#xff0c;在文件中写入多行代码并执行&#xff1a; 进入python后&#xff0c;输入exit()命令退出...

鸿蒙与团结引擎c#与ts简单交互

目录 团结中调用ts代码 鸿蒙中调用团结代码 首先在团结创建代码&#xff0c;需要将代码添加到场景物体中 devecoStudio端编写ts代码 在index页面添加一个测试按钮 团结中调用ts代码 团结引擎 - 手册: Call TypeScript plug-in code from C# scripts 注册函数要跟文件名一致 在u…...

Any 的原理以及实现

序言 在 C17 的更新中引入了一个特别有意思的类型&#xff0c;它提供了一种通用的方式来存储任何类型的数据而不需要提前指定类型&#xff0c; 该类型就是 any。  any 允许你将任意类型的数据存储在一个容器中&#xff0c;并且能够在运行时动态地访问该数据。话不多说&#xf…...

SQLI LABS | Less-35 GET-Bypass Add Slashes (we dont need them) Integer Based

关注这个靶场的其它相关笔记&#xff1a;SQLI LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 输入下面的链接进入靶场&#xff08;如果你的地址和我不一样&#xff0c;按照你本地的环境来&#xff09;&#xff1a; http://localhost/sqli-labs/Less-35/ 话不多说…...

RNN(循环神经网络)详解

1️⃣ RNN介绍 前馈神经网络&#xff08;CNN&#xff0c;全连接网络&#xff09;的流程是前向传播、反向传播和参数更新&#xff0c;存在以下不足&#xff1a; 无法处理时序数据&#xff1a;时序数据长度一般不固定&#xff0c;而前馈神经网络要求输入和输出的维度是固定的&a…...

【AI抠图整合包及教程】探索SAM 2:图像与视频分割领域的革新者

在人工智能的浩瀚星空中&#xff0c;Meta公司的Segment Anything Model 2&#xff08;SAM 2&#xff09;犹如一颗璀璨的新星&#xff0c;以其前所未有的图像与视频分割能力&#xff0c;照亮了计算机视觉领域的新航道。SAM 2不仅继承了其前身SAM在零样本分割领域的卓越表现&…...

DevExpress中文教程 - 如何使用AI模型检查HTML编辑中的语法?

DevExpress .NET MAUI多平台应用UI组件库提供了用于Android和iOS移动开发的高性能UI组件&#xff0c;该组件库包括数据网格、图表、调度程序、数据编辑器、CollectionView和选项卡组件等。 目前许多开发人员正在寻找多种方法将AI添加到解决方案中&#xff08;这通常比想象的要…...

python包管理工具pip和conda的使用对比

python包管理工具pip和conda的使用对比 总述1. pip使用2. conda注意虚拟环境之间的嵌套&#xff0c;这个会导致安装包后看不到包&#xff0c;实际是安装到了base环境里 未完待续 总述 pip相对于conda,对应包的依赖关系管理不强&#xff0c;坏处是容易造成包冲突&#xff0c;好…...

Linux案例:DNS服务器配置

Linux案例&#xff1a;DNS服务器配置 实验一&#xff1a;正向解析 服务端配置&#xff1a; [rootserver ~]# setenforce 0 [rootserver ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.70.131/24 ipv4.gateway 192.168.70.2 ipv4.dns 114.114.114.11…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

GraphQL 实战篇:Apollo Client 配置与缓存

GraphQL 实战篇&#xff1a;Apollo Client 配置与缓存 上一篇&#xff1a;GraphQL 入门篇&#xff1a;基础查询语法 依旧和上一篇的笔记一样&#xff0c;主实操&#xff0c;没啥过多的细节讲解&#xff0c;代码具体在&#xff1a; https://github.com/GoldenaArcher/graphql…...

二维FDTD算法仿真

二维FDTD算法仿真&#xff0c;并带完全匹配层&#xff0c;输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...

Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一&#xff1a;HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二&#xff1a;Floyd 快慢指针法&#xff08;…...

网页端 js 读取发票里的二维码信息(图片和PDF格式)

起因 为了实现在报销流程中&#xff0c;发票不能重用的限制&#xff0c;发票上传后&#xff0c;希望能读出发票号&#xff0c;并记录发票号已用&#xff0c;下次不再可用于报销。 基于上面的需求&#xff0c;研究了OCR 的方式和读PDF的方式&#xff0c;实际是可行的&#xff…...

Oracle实用参考(13)——Oracle for Linux物理DG环境搭建(2)

13.2. Oracle for Linux物理DG环境搭建 Oracle 数据库的DataGuard技术方案,业界也称为DG,其在数据库高可用、容灾及负载分离等方面,都有着非常广泛的应用,对此,前面相关章节已做过较为详尽的讲解,此处不再赘述。 需要说明的是, DG方案又分为物理DG和逻辑DG,两者的搭建…...