Kafka基本原理及使用
目录
基本概念
单机版
环境准备
基本命令使用
集群版
消息模型
成员组成
1. Topic(主题):
2. Partition(分区):
3. Producer(生产者):
4. Consumer(消费者):
5. Broker(代理服务器):
6. Zookeeper:
成员关系
基本概念
Kafka 是一个分布式流处理平台,主要用于实时处理和传输大规模数据流。
基本MQ功能:
- 异步
- 削峰
- 解耦
与RocketMq对比:
- 高吞吐量和低延迟
- 流式处理
- 生态环境更好
适合业务场景:
-
日志聚合: Kafka 作为一个分布式消息传递系统,非常适合用于收集和存储系统和应用程序产生的大量日志数据。它提供了持久性存储和高吞吐量的写入,是构建日志聚合系统的理想选择。
-
实时数据处理: Kafka 可以与流处理框架(如 Apache Flink、Apache Storm、Spark Streaming)集成,用于实时处理和分析数据流。这使得 Kafka 在需要实时数据处理、计算和分析的场景中非常有用。
-
事件溯源: 对于需要记录系统每个状态变化的场景,例如金融交易、订单处理等,Kafka 支持事件溯源,帮助构建可追溯、可审计的系统。
-
消息队列: Kafka 作为分布式消息队列,可用于解耦生产者和消费者之间的通信。这在微服务架构中尤为重要,帮助构建松耦合的系统。
-
数据集成: Kafka 提供 Kafka Connect,一个用于数据集成的工具,用于连接 Kafka 与其他数据存储系统,支持构建端到端的数据流管道。
-
大数据管道: Kafka 可以作为大数据管道的核心组件,用于连接和传递大规模数据集,以支持数据湖、数据仓库等大数据处理场景。
单机版
环境准备
1. 从官网下载kafka, 这里选择3.4.0版本,官网:Apache Kafka
2. 解压压缩包
tar -zxvf kafka_2.13-3.4.0.tgz
3. 启动自带的zookeeper, jps检查是否启动成功
nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
4. 修改kafka配置文件config/server.properties, 允许外网客户端连接
5. 启动kafka
nohup bin/kafka-server-start.sh config/server.properties &
6. jps检查是否启动成功
基本命令使用
1. 创建topic
bin/kafka-topics.sh --create --topic test --bootstrap-server localhost:9092
2. 查看topic
bin/kafka-topics.sh --describe --topic test --bootstrap-server localhost:9092
3. 发送消息
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
4. 消费消息
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test
5. 从起点开始消费消息
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic test
6. 从指定地方消费消息
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic test
7. 分组消费消息
示例:创建三个消费者A,B,C, 其中A和B属于testGrroup消费者组, C属于testGrroup2消费者组
#开一个终端1, 配置消费者组testGrroup
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --consumer-property group.id=testGrroup --topic test#开一个终端2, 配置消费者组testGrroup
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --consumer-property group.id=testGrroup --topic test#开一个终端3, 配置消费者组testGrroup2
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --consumer-property group.id=testGrroup2 --topic test#结果: 终端1和2会竞争消息, 一条只会被其中一个实例消费; 终端3独享消费群组, 每条消息能消费
集群版
==
消息模型
成员组成
1. Topic(主题):
- 消息在 Kafka 中通过主题进行分类,每个主题都是一个消息的类别。
- 生产者将消息发布到一个或多个主题,消费者订阅一个或多个主题。
- 主题在 Kafka 集群中的分区上进行分布,每个分区可以看作是一个有序的日志文件。
2. Partition(分区):
- Topic只是一个逻辑概念,而Partition就是实际存储消息的组件。每个Partiton就是一个queue队列结构。所有消息以FIFO先进先出的顺序保存在这些Partition分区中。
- 每个主题可以划分为一个或多个分区,分区是 Kafka 消息的基本存储单元。
- 分区允许水平扩展和并行处理,提高了整个系统的吞吐量。
- 分区内的消息有序存储,保证了分区内的顺序性。
3. Producer(生产者):
- 生产者负责将消息发布到指定的主题。
- 生产者可以指定消息的键(key),Kafka 根据键将消息发送到特定的分区。
- 生产者将消息发送到分区的 Leader 副本,并可以等待确认或异步发送。
4. Consumer(消费者):
- 消费者订阅一个或多个主题,从中获取消息。
- 消费者可以以消费者组(Consumer Group)的形式进行组织,每个组内的消费者共享订阅的主题的消息。
- 每个分区只能由同一消费者组内的一个消费者进行消费,确保了消息在消费时的顺序性。
5. Broker(代理服务器):
- Broker 是 Kafka 集群中的节点,负责存储和处理消息。
- 每个分区在集群中有多个副本,其中一个是 Leader 副本,其余是 Follower 副本。Leader 负责处理读写请求,Follower 复制 Leader 的数据。
6. Zookeeper:
- Kafka 使用 ZooKeeper 来进行集群管理和协调。
- ZooKeeper 管理 Kafka 集群的节点、分区的分配,以及监视 Broker 的健康状态。
成员关系
-
Topic 和 Partition:
- 一个 Topic 包含一个或多个 Partition。
- 每个 Partition 中的消息是有序的,可以保证 Partition 内的消息顺序性。
- Partition 的数量和分布影响了 Kafka 集群的并发处理能力和水平扩展性。
-
Partition 和 Broker:
- Partition 在 Kafka 集群中分布在多个 Broker 上,以实现水平扩展。
- 每个 Partition 在任意时刻只有一个 Broker 的副本是 Leader,其余的是 Follower。
- Leader 负责处理读写请求,Follower 负责复制 Leader 的数据,以实现高可用性和容错性。
-
Topic 和 Broker:
- 一个 Topic 的多个 Partition 可以分布在多个 Broker 上。
- Topic 的所有 Partition 的所有副本的集合构成了整个 Kafka 集群的数据。
相关文章:

Kafka基本原理及使用
目录 基本概念 单机版 环境准备 基本命令使用 集群版 消息模型 成员组成 1. Topic(主题): 2. Partition(分区): 3. Producer(生产者): 4. Consumer(…...

使用Python爬取GooglePlay并从复杂的自定义数据结构中实现解析
文章目录 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》,对分布…...

前后端分离下的鸿鹄电子招投标系统:使用Spring Boot、Mybatis、Redis和Layui实现源码与立项流程
在数字化时代,采购管理也正经历着前所未有的变革。全过程数字化采购管理成为了企业追求高效、透明和规范的关键。该系统通过Spring Cloud、Spring Boot2、Mybatis等先进技术,打造了从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通过…...

ChatGPT 有什么新奇的使用方式?
来看看 OpenAI 内部是如何使用 ChatGPT 的。 目前(4月29日)距离ChatGPT发布了已经半年,这期间大家基本上把能想到的ChatGPT的使用方法都研究遍了——从写作、写代码,到翻译、英语润色,再到角色扮演等等。 所以&#x…...

【计算机四级(网络工程师)笔记】操作系统概论
目录 一、OS的概念 1.1OS的定义 1.2OS的特征 1.2.1并发性 1.2.2共享性 1.2.3随机性 1.3研究OS的观点 1.3.1软件的观点 1.3.2资源管理器的观点 1.3.3进程的观点 1.3.4虚拟机的观点 1.3.5服务提供者的观点 二、OS的分类 2.1批处理操作系统 2.2分时操作系统 2.3实时操作系统 2.4嵌…...
LeetCode算法练习top100:(10)贪心算法
package top100.贪心算法;import java.util.ArrayList; import java.util.List;public class TOP {//121. 买卖股票的最佳时机public int maxProfit(int[] prices) {int res 0, min prices[0];for (int i 1; i < prices.length; i) {if (prices[i] < min) {min price…...
随记-探究 OpenApi 的加密方式
open api 主要参数如下 appKey 接口Key(app id)appSecret 接口密钥timeStamp 时间戳 毫秒nonceStr 随机字符串signature 加密字符串 客户端 使用 appSecret 按照一定规则将 appKey timeStamp nonceStr 进行加密,得到密文 signature将 appK…...

stm32学习总结:4、Proteus8+STM32CubeMX+MDK仿真串口收发
stm32学习总结:4、Proteus8STM32CubeMXMDK仿真串口收发 文章目录 stm32学习总结:4、Proteus8STM32CubeMXMDK仿真串口收发一、前言二、资料收集三、STM32CubeMX配置串口1、配置开启USART12、设置usart中断优先级3、配置外设独立生成.c和.h 四、MDK串口收发…...
配置paddleocr及paddlepaddle解决报错 GLIBCXX_3.4.30 FreeTypeFont
配置 https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/StyleText/README_ch.md#style-text 环境配置 https://www.paddlepaddle.org.cn/ 根据自己的cuda版本选择paddlepaddle-gpu # 新建conda环境 # python version conda create -n paddle python3.8 # 安装p…...

【实战】如何在Docker Image中轻松运行MySQL
定义 使用Docker运行MySQL有许多优势。它允许数据库程序和数据分离,增强了数据的安全性和可靠性。Docker Image的轻便性简化了MySQL的部署和迁移,而Docker的资源隔离功能确保了应用程序之间无冲突。结合中间件和容器化系统,Docker为MySQL提供…...

PLC物联网,实现工厂设备数据采集
随着工业4.0时代的到来,物联网技术在工厂设备管理领域的应用日益普及。作为物联网技术的重要一环,PLC物联网为工厂设备数据采集带来了前所未有的便捷和高效。本文将围绕“PLC物联网,实现工厂设备数据采集”这一主题,探讨PLC物联网…...

npm安装依赖报错ERESOLVE unable to resolve dependency tree(我是在taro项目中)(node、npm 版本问题)
换了电脑之后新电脑安装包出错 👇👇👇 npm install 安装包报错 ERESOLVE unable to resolve dependency tree 百度后尝试使用 npm install --force 还是报错 参考 有人说是 node 版本和 npm 版本的问题 参考 新电脑 node版本:16.1…...

Maven仓库上传jar和mvn命令汇总
目录 导入远程仓库 命令结构 命令解释 项目pom 输入执行 本地仓库导入 命令格式 命令解释 Maven命令汇总 mvn 参数 mvn常用命令 web项目相关命令 导入远程仓库 命令结构 mvn deploy:deploy-file -Dfilejar包完整名称 -DgroupIdpom文件中引用的groupId名 -Dartifa…...

Jenkins 执行远程脚本的插件—SSH2 Easy
SSH2 Easy 是什么? SSH2 Easy 是一个 Jenkins 插件,它用于在 Jenkins 构建过程中通过 SSH2 协议与远程服务器进行交互。通过该插件,用户可以在 Jenkins 的构建过程中执行远程命令、上传或下载文件、管理远程服务器等操作。 以下是 SSH2 Eas…...

Starting the Docker Engine...一直转圈
出现的问题: 原因排查: 看了网上的很多篇文章,每个原因都排查了,没有发现问题。 遇到这样的情况应先看自己是否安装成功 打开运行,在空框中输入powershell并点击确定: docker version 显示版本证明安装…...

关于Python里xlwings库对Excel表格的操作(十五)
这篇小笔记主要记录如何【获取单元格数据的对齐方式或更改单元格数据的对齐方式】。 前面的小笔记已整理成目录,可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】 (1)如何安装导入xlwings库; …...

[Linux] LVS+Keepalived高可用集群部署
一、Keepalived实现原理 1.1 高可用方案 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。 在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色…...
【版本管理】git stash用法
应用场景 我们在开发过程中可能会遇到这样的情况: 想从A分支切换到B分支,但A分支尚未改完,暂时不想提交代码 此时可以在切换到B分支前,先通过stash指令来缓存本地改动,等切回A分支时,再通过stash还原改动…...
声明式的理解【gpt】
一 MyBatis采用了声明式语法来进行SQL映射配置【mybatis声明式】 MyBatis是一款优秀的持久层框架,支持自定义SQL、存储过程以及高级映射,使得开发人员能够专注于SQL本身而不是数据库访问。MyBatis提供了两种配置方式:XML配置和注解配置&…...
提高Spring Boot技能的9种方法
以下是提高 Spring Boot 技能的 9 种方法: 1. 外部化您的配置: 充分利用 Spring Boot 潜力的另一种方法是尽可能地尝试外部化您的配置,而不是对其进行硬编码。外部化您的配置将使您的应用程序更加灵活且更易于管理。 外部化配置的另一个优点…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...