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 潜力的另一种方法是尽可能地尝试外部化您的配置,而不是对其进行硬编码。外部化您的配置将使您的应用程序更加灵活且更易于管理。 外部化配置的另一个优点…...
HIVE基本操作
1、启动远程服务端:hive --service metastore启动(这里是阻塞式),然后在客户端操作 2、Hive DDL(数据库定义语言) --展示所有数据库show databases; --切换数据库use database_name; 3、创建语法&#x…...
【经典LeetCode算法题目专栏分类】【第5期】贪心算法:分发饼干、跳跃游戏、模拟行走机器人
《博主简介》 小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 分发饼干 class Solutio…...
【大数据面试】MapReduce常见问题与答案
目录 介绍下MapReduce MapReduce优缺点 MapReduce架构 MapReduce工作原理 MapReduce哪个阶段最费时间 ✅MapReduce中的Combine是干嘛的?有什么好出? ✅MapReduce环形缓冲区是什么 ✅MapReduce为什么一定要有环型缓冲区 MapReduce为什么一定要有Shuffle过程 MapRedu…...
数组深入学习感悟
注:本文学习借鉴于《代码随想录》 一.介绍数组 数组是储存在连续内存空间中的相同类型数据的集合 数组名的理解: 数组名就是数组⾸元素(第⼀个元素)的地址是对的,但是有两个例外: sizeof(数组名),sizeof中单独放数…...
亚马逊云科技-如何缩容/减小您的AWS EC2根卷大小-简明教程
一、背景 Amazon EBS提供了块级存储卷以用于 EC2 实例,EBS具备弹性的特点,可以动态的增加容量、更改卷类型以及修改预配置的IOPS值。但是EBS不能动态的减少容量,在实际使用中,用户也许会存在此类场景: 在创建AWS EC2…...
[Java 基础] Java Stream
Java Stream 是 Java 8 引入的新特性之一,它提供了一种新的处理数据集合的方式。Stream 可以使我们更加方便地对集合进行处理和操作,同时还能提高代码的简洁性和可读性。 文章目录 什么是 Stream常见用法创建 Stream中间操作终端操作 总结 什么是 Stream…...
达芬奇18.6DaVinci ResolveStudio(Win/Mac)激活版
DaVinci Resolve Studio 18是一款业界领先的视频后期制作软件,它集成了剪辑、调色、视觉特效、动态图形和音频后期制作等功能,为用户提供了完整的创作解决方案。该软件不仅适用于电影、电视和网页内容的制作,还广泛应用于广告、纪录片和独立电…...
力扣题目学习笔记(OC + Swift)16. 最接近的三数之和
16. 最接近的三数之和 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 排序 双指针 思路同15. 三数之和 简单地使用三重循环枚举所有的三…...
基于STM32的DHT11温湿度传感器与LCD显示器的集成设计
在本文中,我们将详细介绍如何基于STM32微控制器实现DHT11温湿度传感器与LCD显示器的集成设计。我们将包括硬件连接、软件编程以及涉及的STM32库函数和相关知识。这个项目旨在帮助您理解如何使用STM32来读取DHT11温湿度传感器的数据,并将数据显示在LCD显示…...
解决浏览器自动将http跳转至https导致无法访问的问题
以下只针对Chrome浏览器 方法一: 1.地址栏中输入chrome://net-internals/#hsts。 2.在Delete domain中输入项目的域名,并Delete(删除)。 3.可以在Query domain测试是否删除成功。 HSTS全称:HTTP Strict Transport Se…...
网站开发在哪里接活/公司个人怎么做网络推广
深圳职业技术学院2015年自主招生考试(面向中职毕业生)计算机应用技术专业考试大纲专业综合理论考试大纲《计算机基础》与《C语言程序设计基础》基本要求:了解计算机的发展与计算机的特点熟知计算机的基本结构与工作原理认识计算机中的信息表示与存储掌握Windows XP操…...
织梦做手机网站/如何进行搜索引擎优化?
最近做开发遇到个很奇怪的问题,公网服务器的项目使用谷歌浏览器和360极速浏览器出现ERR_EMPTY_RESPONSE,并且是偶然的,而且似乎跟网络也有关系(使用公司的wifi出现了,网线连接没出现,在家里访问没出现)。。。头疼啊&am…...
专门做捷径网站/广东seo推广
1)下载地址:Apache JMeter - Apache JMeter™ 2)下载完成后解压 在bin目录下找到jmeter.properties文件将界面语言改成中文的 双击jmeter.bat文件启动 3)添加一个线程组 添加>>线程用户>>线程组 设置线程属性&…...
福州做网站/如何把网站推广
今年蓝港卖版权卖了近7000[来源:GameRes.com]万人民币(官方称1000多万美金),年收入不到2亿人民币。也就是说1.3亿是国内运营收入,一半是西游记,也就是说6500万是西游记,平均每月西游记也就500多…...
东莞做企业网站/推广app赚钱的平台
进入当前项目目录 cd android adb reverse tcp:8081 tcp:8081 cd .. npm start gradlew.bat assembleRelease --console plain (自己最常用的,只打包不安装) gradlew assembleRelease (打包加自动安装)...
使用flash做网站/世界比分榜
7转载于:https://www.cnblogs.com/wuguangzong/p/10925016.html...