2024.1.11 Kafka 消息队列,shell命令,核心原理

news2025/1/11 11:47:58

目录

 一 . 消息队列

二. Kafka

三 . 启动命令

 四 . Kafka的Shell 命令

五 . Kafka的核心原理

1. Topic的分区和副本机制

2 . 消息存储机制 和 查询机制     

3. Kafka中生产者数据分发策略

 六 . Kafka 之所以具有高速的读写性能,主要有以下几个原因

七. 笔记 


 一 . 消息队列

应用场景:

        应用解耦合:类似单点故障

        异步处理: 减少处理时间

        限流削峰 : 不管流量多大,放到消息队列中,都是按照一定的节奏进行处理

        消息驱动的系统: 消息队列,消息生产者,消费者(负责对消息进行处理)

        消息(message): 指的是数据,只不过这个数据存在一定流动状态
        队列(queue): 指的容器,可以存储数据,只不过这个容器具备FIFO(先进先出)特性

消息队列中两个角色:

        生产者producer:生产/发送消息到消息队列中

        消费者consumer: 从消息队列中获取消息

二. Kafka

1. 基本介绍

        kafka是一款消息队列的中间件产品;

        kafka特点:

                可靠性

                可扩展性

                耐用性

                性能

 2. kafka架构

        1. Kafka中集群节点叫broker ;

        2. 集群的节点与节点之间,没有主从之分 ; 

        3. 同一个分区的不同副本间中, 有主从关系 ,主是leader , 从是Follower

        4. 同一个Partitions分区可以设置多个副本 , 但是副本数量不能超过集群broker节点的个数

        5. zookeeper用来管理集群,以及管理元数据信息

        6. Topic 主题 ,是业务层面对消息进行分类的

三 . 启动命令

三台虚拟机启动Zookeeper

        cd /export/server/zookeeper/bin

        ./zkServer.sh start

node1脚本启动kafka

         cd /export/onekey

        ./start-kafka.sh

        ./stop-kafka.sh

 四 . Kafka的Shell 命令

1.  创建Topic

./kafka-topics.sh --bootstrap-server node1.itcast.cn:9092,node2.itcast.cn:9092 --create --topic test02 --partitions 4 --replication-factor 2  

参数: 

        -- bootstrap-server: Kafka集群中broker连接信息

        -- create : 指定操作类型 .这里是新建Topic

        -- topic: 指定要新建的Topic名称

        -- partitions :设置Topic的分区数

        -- relication-factor :设置Topic分区的副本数

 2.  查看Topic

./kafka-topics.sh --bootstrap-server node1.itcast.cn:9092,node2.itcast.cn:9092 --list

参数说明:
    --bootstrap-server: Kafka集群中broker连接信息
    --list: 指定操作类型。这里是查看Kafka集群上所有可用的Topic列表

 3. 查看具体Topic

./kafka-topics.sh --bootstrap-server node1.itcast.cn:9092,node2.itcast.cn:9092 --describe --topic test04
参数说明:
    --bootstrap-server: Kafka集群中broker连接信息
    --describe: 指定操作类型。这里是查看具体Topic信息

 4. 模拟生产者Producer

./kafka-console-producer.sh --broker-list node1.itcast.cn:9092,node2.itcast.cn:9092 --topic test04
参数说明:
    --broker-list: Kafka集群中broker连接信息
    --topic: 指定要将消息发送到哪个具体的Topic

5. 模拟消费者 Consumer

 

./kafka-console-consumer.sh --bootstrap-server node1.itcast.cn:9092,node2.itcast.cn:9092 --topic test04

参数说明:
    --bootstrap-server: Kafka集群中broker连接信息
    --topic: 指定要从哪个Topic中消费消息
    --from-beginning: 指定该参数以后,会从最旧的地方开始消费
    latest: 消费者(默认)从最新的地方开始消费
    --max-messages: 最多消费的条数。满足条数后,就会自动结束
    --group: 指定消费组名称。一个消费者只能属于一个消费组;一个消费组里面可以有多个消费者。同一个Topic中的同一条数据,只能被同一个消费组中的一个消费者所消费
    

6. 修改Topic

 

./kafka-topics.sh --bootstrap-server node1.itcast.cn:9092,node2.itcast.cn:9092 --alter --topic test01 --partitions 10

分区: 只能增大,不能减小。而且没有数量限制
副本: 既不能增大,也不能减小

减小分区:
./kafka-topics.sh --bootstrap-server node1.itcast.cn:9092,node2.itcast.cn:9092 --alter --topic test01 --partitions 1

 修改副本数:
./kafka-topics.sh --bootstrap-server node1.itcast.cn:9092,node2.itcast.cn:9092 --alter --topic test01 --replication-factor 2 --partitions 11

7. 删除Topic

 

./kafka-topics.sh --bootstrap-server node1.itcast.cn:9092,node2.itcast.cn:9092 --delete --topic test01

参数说明:
    --bootstrap-server: Kafka集群中broker连接信息
    --delete: 指定操作类型。这里是删除Topic
    --topic: 指定要删除哪个Topic

 8. 查看消费组中有多少个消费者

./kafka-consumer-groups.sh --bootstrap-server node1.itcast.cn:9092,node2.itcast.cn:9092 --group g_01 --members --describe

 

五 . Kafka的核心原理

1. Topic的分区和副本机制

        分区的作用:

                1- 避免单台服务器容量的限制

                2- 提升Topic的吞吐量

                3 - 分区数量不要超过Kafka集群中的broker节点个数的3倍

        副本的作用:

                1 - 提升数据安全性,但也会导致冗余过多

                2- 副本个数不能超过集群的broker节点个数,推荐副本1-3个

2 . 消息存储机制 和 查询机制     

        消息存储机制

1-xx.log和xx.index它们的作用是什么?
        答:
        xx.log: 称之为segment片段文件,也就是一个Partition分区的数据,会被分成多个segment(log)片段文件进行存储。
        xx.index: 称之为索引文件,该文件的作用是用来加快对xx.log文件内容检索的速度


2-xx.log和xx.index文件名称的意义?
        答: 这个数字是xx.log文件中第一条消息的offset(偏移量)


3-为什么一个Partition分区的数据要分成多个xx.log(segment片段文件)文件进行存储?
        答:
      1- 如果一个文件的数据量过大,打开和关闭文件都非常消耗资源
      2- 在一个大的文件中,检索内容也会非常消耗资源
      3- Kafka只是用来临时存储消息数据。会定时将过期数据删除。如果数据放在一个文件中,删除的效率低;

        如果数据分成了多个segment片段文件进行存储,删除的时候只需要判断segment文件最后修改时间,如果超过了保留时间,就直接将整个segment文件删除。该保留时间是通过server.properties文件中的log.retention.hours=168进行设置,默认保留168小时(7天)

        

        查询机制

查询步骤:
1- 首先先确定要读取哪个xx.log(segment片段)文件。368776该offset的消息在368769.log文件中
2- 查询xx.log对应的xx.index,查询该条消息的物理偏移量范围
3- 根据消息的物理偏移量范围去读取xx.log文件(底层是基于磁盘的顺序读取)
4- 最终就获取到了具体的消息内容

3. Kafka中生产者数据分发策略

分发策略如下这些:

  • 1- 随机分发策略:将消息发到到随机的某个分区上。Python支持,Java不支持

  • 2- 指定分区策略:将消息发到指定的分区上面。Python支持,Java支持

  • 3- Hash取模策略:对消息的key先取Hash值,再和分区数取模。Python支持,Java支持

  • 4- 轮询策略:在Kafka的2.4及以上版本,已经更名成粘性分发策略。Python不支持,Java支持

  • 5- 自定义分发策略:Python支持,Java支持

 六 . Kafka 之所以具有高速的读写性能,主要有以下几个原因

Kafka之所以具有高速的读写性能,主要有以下几个原因:

  1. 分布式架构:Kafka采用分布式架构,可以通过水平扩展来处理大规模的数据流。它将数据分成多个分区,并将这些分区分布在不同的节点上,实现了数据的并行处理和负载均衡,从而提高了读写性能。

  2. 零拷贝技术:Kafka使用零拷贝技术来减少数据在内存和磁盘之间的拷贝次数。它通过直接内存访问(DMA)技术,将数据从磁盘读取到内存或者从内存写入到磁盘,避免了数据的多次复制,减少了IO操作的开销,提高了读写性能。

  3. 批量写入和压缩:Kafka支持批量写入消息和消息的压缩。它可以将多个消息一次性写入到磁盘,减少了磁盘IO的次数,提高了写入性能。同时,Kafka还支持对消息进行压缩,减小了消息的存储空间,降低了网络传输的开销,进一步提高了读写性能。

  4. 高效的消息索引和存储结构:Kafka使用高效的消息索引和存储结构,例如日志结构和位移索引,可以快速地定位和检索消息。它采用追加写入的方式,顺序写入磁盘,减少了随机写入的开销,提高了读写性能。

综上所述,Kafka通过分布式架构、零拷贝技术、批量写入和压缩、高效的消息索引和存储结构等手段,实现了高速的读写性能,使其成为处理大规模数据流的理想选择。

七. 笔记 

count(1)会记null,

count(0)会记null,

count(*)会记null

 count(字段)不会记null

count (null)得到null

import os
from pyspark import SparkConf, SparkContext, StorageLevel
from pyspark.sql import SparkSession
import pyspark.sql.functions as F
from pyspark.sql import Window as win
from pyspark.sql.types import StructType, IntegerType, StringType, StructField, FloatType

# 绑定指定的Python解释器
os.environ['SPARK_HOME'] = '/export/server/spark'
os.environ['PYSPARK_PYTHON'] = '/root/anaconda3/bin/python3'
os.environ['PYSPARK_DRIVER_PYTHON'] = '/root/anaconda3/bin/python3'

if __name__ == '__main__':
    # 1- 创建SparkSession对象
    spark = SparkSession.builder \
        .config('spark.sql.shuffle.partitions', 1) \
        .appName('new_sale') \
        .master('local[*]') \
        .getOrCreate()
    # 使用框架
    spark.conf.set('spark.sql.execution.arrow.pyspark.enabled', True)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1375034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

指导AI进行推理:提示工程如何弥补RAG系统中的差距

每日推荐一篇专注于解决实际问题的外文,精准翻译并深入解读其要点,助力读者培养实际问题解决和代码动手的能力。 欢迎关注公众号(NLP Research) 原文标题:Instructing AI to Reason: How Prompt Engineering Bridges the Gap in RAG Systems 原文地址:https://medium.c…

vscode配置Todo Tree插件

一、在VSCode中安装插件Todo Tree ​​​​ 二、按下快捷键ctrlshiftP,输入setting.jspn 选择相应的配置范围,我们选择的是用户配置 Open User Settings(JSON),将以下代码插入其中。 //todo-tree 标签配置从这里开始 标签兼容大小写字母(很…

MoE模型性能还能更上一层楼?一次QLoRA微调实践

Fine-Tuning Mixtral 8x7B with QLoRA:Enhancing Model Performance 🚀 编者按:最近,混合专家(Mixture of Experts,MoE)这种模型设计策略展现出了卓越的语言理解能力,如何在此基础上进一步提升 MoE 模型的性能成为业界…

React 18中新钩子 useDeferredValue 使用

React是一个流行的用于构建用户界面的JavaScript库,它不断发展以为开发人员提供优化性能的工具。 React 18中引入的此类工具之一是useDeferredValue钩子,它旨在通过优先渲染更新来提高应用程序的性能。 useDeferredValue钩子是什么? useDeferredValue钩子是React性能优化工…

c++析构函数

析构函数的简述 1. 析构函数和构造函数类似,是c规定当对象的生命周期结束时,默认你会调用析构函数。 2. 同理,当我们不写析构函数的时候,编译器会自动生成一个空实现的析构函数。 3. 析构函数只能编译器自己调用,我们…

CSS3中transform2D变形详解

CSS3变形 在CSS3中,动画效果包括3个部分: 变形(transform)过渡(transition)动画(animation) 在实际开发中,有时需要实现元素的各种变形效果,如平移,缩放,旋转,倾斜等。 在CSS3中&#xff0c…

2 快速前端开发

CSS快速入门 1.CSS案例1.1 内容回顾1.2 案例:二级菜单1.2.1 划分区域1.2.2 搭建骨架1.2.3 Logo区域1.2.4 菜单部分 1.3 案例:顶部菜单 二级菜单小结 1.4 案例:推荐区域1.4.1 划分区域1.4.2 搭建骨架1.4.3 案例的实现小结 2. CSS知识点2.1 ho…

Spark on Hive及 Spark SQL的运行机制

Spark on Hive 集成原理 HiveServer2的主要作用: 接收SQL语句,进行语法检查;解析SQL语句;优化;将SQL转变成MapReduce程序,提交到Yarn集群上运行SparkSQL与Hive集成,实际上是替换掉HiveServer2。是SparkSQL…

基于自适应遗传算法的车间调度matlab仿真,可以任意调整工件数和机器数,输出甘特图

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 编码与初始化 4.2 适应度函数 4.3 遗传操作 4.4 自适应机制 4.5 终止条件 5.完整程序 1.程序功能描述 基于自适应遗传算法的车间调度matlab仿真,可以任意调整工件数和机器数,输出甘…

java基础之异常练习题

异常 1.Java 中所有的错误/异常都继承自 Throwable类;在该类的子类中, Error 类表示严重的底层错误, 对于这类错误一般处理的方式是 直接报告并终止程序 ; Exception 类表示异常。 2.查阅API,完成以下填空:…

铭文 LaunchPad 平台 Solmash 推出早鸟激励计划

为感谢用户对Solmash的支持,Solmash 特别推出“Solmash早鸟激励计划”,以回馈社区的早期参与者,这是专为已经参与Staking Pool或Honest Pool的用户推出的激励。 Solmash NFT激励 被列入早鸟计划的用户,可通过点击:sol…

文件上传进阶绕过技巧(一)和靶场实战

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 0、环境准备 请移步《文件上传靶场实战:upl…

NLP论文阅读记录 - wos | 01 使用深度学习对资源匮乏的语言进行抽象文本摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Abstractive text summarization of lowresourced languages usi…

openai自定义API操作 API (openai.custom)

OpenAI 提供了一个自定义 API,允许开发者通过编程方式与 OpenAI 的 AI 模型进行交互。使用这个 API,你可以执行各种任务,例如文本生成、推理和翻译等。 以下是使用 OpenAI 自定义 API 的基本步骤: 创建 API 密钥:首先…

【C#】使用 LINQ 中的 Skip() 和 Take()进行分页,为什么要分页,分页作用是什么

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是是《C#》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握…

Demo: 给图片添加自定义水印并下载

给图片添加自定义水印并下载 <template><div class"wrap"><div class"optea"><div class"file-upload"><p>选择图片</p><el-button type"text" style"color: #c00;"><label f…

可狱可囚的爬虫系列课程 11:Requests中的SSL

一、SSL 证书 SSL 证书是数字证书的一种&#xff0c;类似于驾驶证、护照、营业执照等的电子副本。SSL 证书也称为 SSL 服务器证书&#xff0c;因为它是配置在服务器上。 SSL 证书是由受信任的数字证书颁发机构 CA 在验证服务器身份后颁发的&#xff0c;其具有服务器身份验证和…

小程序基础学习(事件处理)

概述&#xff1a;点击某一个标题&#xff0c;使标题选中增加不同颜色。 <!--pages/four/four.wxml--> <navigation-bar title"牧原" back"{{false}}" color"black" background"#FFF"></navigation-bar> <view c…

WPF XAML(一)

一、XAML的含义 问&#xff1a;XAML的含义是什么&#xff1f;为什么WPF中会使用XAML&#xff1f;而不是别的&#xff1f; 答&#xff1a;在XAML是基于XML的格式&#xff0c;XML的优点在于设计目标是具有逻辑性易读而且简单内容也没有被压缩。 其中需要提一下XAML文件在 Visu…

WindowsServer安装mysql最新版

安装 下载相应mysql安装包&#xff1a; MySQL :: Download MySQL Installer 选择不登陆下载 双击运行下载好的mysql-installer-community-*.*.*.msi 进入类型选择页面&#xff0c;本人需要mysql云服务就选择了server only server only&#xff08;服务器&#xff09;&#x…