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

Kafka基本原理及使用

目录

基本概念

单机版

环境准备

基本命令使用

集群版

消息模型

成员组成

1. Topic(主题):

2. Partition(分区):

3. Producer(生产者):

4. Consumer(消费者):

5. Broker(代理服务器):

6. Zookeeper:

 成员关系


基本概念

Kafka 是一个分布式流处理平台,主要用于实时处理和传输大规模数据流。

基本MQ功能:

  • 异步
  • 削峰
  • 解耦

与RocketMq对比:

  • 高吞吐量和低延迟
  • 流式处理
  • 生态环境更好

适合业务场景:

  1. 日志聚合: Kafka 作为一个分布式消息传递系统,非常适合用于收集和存储系统和应用程序产生的大量日志数据。它提供了持久性存储和高吞吐量的写入,是构建日志聚合系统的理想选择。

  2. 实时数据处理: Kafka 可以与流处理框架(如 Apache Flink、Apache Storm、Spark Streaming)集成,用于实时处理和分析数据流。这使得 Kafka 在需要实时数据处理、计算和分析的场景中非常有用。

  3. 事件溯源: 对于需要记录系统每个状态变化的场景,例如金融交易、订单处理等,Kafka 支持事件溯源,帮助构建可追溯、可审计的系统。

  4. 消息队列: Kafka 作为分布式消息队列,可用于解耦生产者和消费者之间的通信。这在微服务架构中尤为重要,帮助构建松耦合的系统。

  5. 数据集成: Kafka 提供 Kafka Connect,一个用于数据集成的工具,用于连接 Kafka 与其他数据存储系统,支持构建端到端的数据流管道。

  6. 大数据管道: 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&#xff08;app id&#xff09;appSecret 接口密钥timeStamp 时间戳 毫秒nonceStr 随机字符串signature 加密字符串 客户端 使用 appSecret 按照一定规则将 appKey timeStamp nonceStr 进行加密&#xff0c;得到密文 signature将 appK…...

stm32学习总结:4、Proteus8+STM32CubeMX+MDK仿真串口收发

stm32学习总结&#xff1a;4、Proteus8STM32CubeMXMDK仿真串口收发 文章目录 stm32学习总结&#xff1a;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有许多优势。它允许数据库程序和数据分离&#xff0c;增强了数据的安全性和可靠性。Docker Image的轻便性简化了MySQL的部署和迁移&#xff0c;而Docker的资源隔离功能确保了应用程序之间无冲突。结合中间件和容器化系统&#xff0c;Docker为MySQL提供…...

PLC物联网,实现工厂设备数据采集

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

npm安装依赖报错ERESOLVE unable to resolve dependency tree(我是在taro项目中)(node、npm 版本问题)

换了电脑之后新电脑安装包出错 &#x1f447;&#x1f447;&#x1f447; npm install 安装包报错 ERESOLVE unable to resolve dependency tree 百度后尝试使用 npm install --force 还是报错 参考 有人说是 node 版本和 npm 版本的问题 参考 新电脑 node版本&#xff1a;16.1…...

Maven仓库上传jar和mvn命令汇总

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

Jenkins 执行远程脚本的插件—SSH2 Easy

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

Starting the Docker Engine...一直转圈

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

关于Python里xlwings库对Excel表格的操作(十五)

这篇小笔记主要记录如何【获取单元格数据的对齐方式或更改单元格数据的对齐方式】。 前面的小笔记已整理成目录&#xff0c;可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】 &#xff08;1&#xff09;如何安装导入xlwings库&#xff1b; &#xf…...

[Linux] LVS+Keepalived高可用集群部署

一、Keepalived实现原理 1.1 高可用方案 Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案&#xff0c;可以解决静态路由出现的单点故障问题。 在一个LVS服务集群中通常有主服务器&#xff08;MASTER&#xff09;和备份服务器&#xff08;BACKUP&#xff09;两种角色…...

【版本管理】git stash用法

应用场景 我们在开发过程中可能会遇到这样的情况&#xff1a; 想从A分支切换到B分支&#xff0c;但A分支尚未改完&#xff0c;暂时不想提交代码 此时可以在切换到B分支前&#xff0c;先通过stash指令来缓存本地改动&#xff0c;等切回A分支时&#xff0c;再通过stash还原改动…...

声明式的理解【gpt】

一 MyBatis采用了声明式语法来进行SQL映射配置【mybatis声明式】 MyBatis是一款优秀的持久层框架&#xff0c;支持自定义SQL、存储过程以及高级映射&#xff0c;使得开发人员能够专注于SQL本身而不是数据库访问。MyBatis提供了两种配置方式&#xff1a;XML配置和注解配置&…...

提高Spring Boot技能的9种方法

以下是提高 Spring Boot 技能的 9 种方法&#xff1a; 1. 外部化您的配置&#xff1a; 充分利用 Spring Boot 潜力的另一种方法是尽可能地尝试外部化您的配置&#xff0c;而不是对其进行硬编码。外部化您的配置将使您的应用程序更加灵活且更易于管理。 外部化配置的另一个优点…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...