三十八、大数据技术之Kafka3.x(1)

🌻🌻 目录

  • 一、Kafka 概述
    • 1.1 定义
    • 1.2 消息队列
      • 1.2.1 消息队列内部实现原理
      • 1.2.2 传统消息队列的应用场景
      • 1.2.3 消息队列的两种模式
    • 1.3 Kafka 基础架构
  • 二、 Kafka 快速入门
    • 2.1 安装前的准备
    • 2.2 安装部署
      • 2.2.1 集群规划
      • 2.2.2 单节点或集群部署
      • 2.2.3 集群启停脚本
    • 2.3 Kafka命令行操作
      • 2.3.1 主题命令行操作
      • 2.3.2 生产者命令行操作
      • 2.3.3 消费者命令行操作
      • 2.3.4 生产者生产消费者消费

学习本文技术需要已经有如下的基础要求:

  • 熟悉Javase基础
  • 熟悉Linux常用命令
  • 熟悉ldea开发工具

一、Kafka 概述

1.1 定义

在这里插入图片描述

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。

在这里插入图片描述

1.2 消息队列

  • 目前企业中比较常见的消息队列产品主要有KafkaActiveMQRabbitMQRocketMQ等。
  • 在大数据场景主要采用Kafka作为消息队列在JavaEE开发中主要采用ActiveMQ、RabbitMQ、RocketMQ 作为消息队列。

1.2.1 消息队列内部实现原理

消息队列(非kafka)内部实现原理

在这里插入图片描述

1.2.2 传统消息队列的应用场景

传统的消息队列的主要应用场景包括:缓存/消峰(消去峰值)、解耦和异步通信

  • 消息队列的应用场景——缓存/消峰

在这里插入图片描述

  • 消息队列的应用场景——解耦

在这里插入图片描述

  • 消息队列的应用场景——异步通信

在这里插入图片描述

1.2.3 消息队列的两种模式

在这里插入图片描述

1.3 Kafka 基础架构

在这里插入图片描述

  • (1)Producer:消息生产者,就是向Kafka broker发消息的客户端。
  • (2)Consumer:消息消费者,向Kafka broker取消息的客户端。
  • (3)Consumer Group(CG):消费者组,由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。
  • (4)Broker:一台Kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。
  • (5)Topic:可以理解为一个队列,生产者和消费者面向的都是一个topic
  • (6)Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。
  • (7)Replica:副本。一个topic的每个分区都有若干个副本,一个Leader和若干个Follower
  • (8)Leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是Leader。
  • (9)Follower:每个分区多个副本中的“从”,实时从Leader中同步数据,保持和Leader数据的同步。Leader发生故障时,某个Follower会成为新的Leader。

抽象理解 (生产者消费者):

  1. 生产者消费者,生产者生产鸡蛋,消费者消费鸡蛋,生产者生产一个鸡蛋,消费者就消费一个鸡蛋,假设消费者消费鸡蛋的时候噎住了(系统宕机了),生产者还在生产鸡蛋,那新生产的鸡蛋就丢失了。
  2. 再比如生产者很强劲(大交易量的情况),生产者1秒钟生产100个鸡蛋,消费者1秒钟只能吃50个鸡蛋,那要不了一会,消费者就吃不消了(消息堵塞,最终导致系统超时),消费者拒绝再吃了,”鸡蛋“又丢失了。
  3. 这个时候我们放个篮子在它们中间,生产出来的鸡蛋都放到篮子里,消费者去篮子里拿鸡蛋,这样鸡蛋就不会丢失了,都在篮子里。

上面的例子里面:

1.篮子就是kafka,鸡蛋其实就是数据流,系统之间的交互都是通过数据流来传输的(就是tcp、https什么的),也称为报文,或者消息。
2. 消息队列满了,其实就是篮子满了,鸡蛋放不下了,那赶紧多放几个篮子,其实就是kafka的扩容。

  • producer:生产者,就是它来生产“鸡蛋”的。
  • consumer:消费者,生出的“鸡蛋”它来消费。
  • broker:就是篮子了,鸡蛋生产出来后放在篮子里。
  • topic:你把它理解为标签,生产者每生产出来一个鸡蛋就贴上一个标签(topic),消费者可不是谁生产的“鸡蛋”都吃的,有的只吃草鸡蛋,有的吃洋鸡蛋,篮子中分为一个个小盒子,草鸡蛋放一个盒子里,洋鸡蛋放另一个盒子里。这样不同的生产者生产出来的“鸡蛋”,消费者就可以选择性的“吃”了。

大家一定要学会抽象的去思考,上面只是属于业务的角度,如果从技术角度,topic标签实际就是队列,生产者把所有“鸡蛋(消息)”都放到对应的队列里了,消费者到指定的队列里取。

二、 Kafka 快速入门

2.1 安装前的准备

  • 先搭建一台虚拟机,再克隆三台出来
  • 步骤在这里(三台上面仅需安装jdk,hadoop(可不装),zookeeper(必须装))

2.2 安装部署

安装前的准备:

资源获取:

通过百度网盘分享的文件获取:

kafka软件大全 提取码:yyds

在这里插入图片描述

  • 1.VMware的安装:VMware-workstation-full-15.5.0
  • 2.镜像的安装:CentOS-7.5-x86_64-DVD-1804.iso
  • 3.JDK的安装: jdk-8u212-linux-x64.tar.gz
  • 4.Hadoop的安装: hadoop-3.1.3.tar.gz

2.2.1 集群规划

linux-102linux-103linux-104
zkzkzk
kafkakafkakafka

2.2.2 单节点或集群部署

  • 0)官方下载 获取

在这里插入图片描述

在这里插入图片描述

  • 1)本地资源下载获取(上面网盘获取)
  • 2)上传压缩包到服务器 /usr/local下面并且进行解压

在这里插入图片描述

tar -zxvf kafka_2.12-3.0.0.tgz

在这里插入图片描述

3)修改解压后的文件名称到当前目录下

mv kafka_2.12-3.0.0 kafka

在这里插入图片描述

4)进入到/usr/local/kafka/config目录,修改配置文件 server.properties 如下③ 处地方,并保存。

vi server.properties

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

创建文件夹 datas

在这里插入图片描述

5)分发安装包(针对上述集群配置,注:分发后配置里面的这个需要依次改动 broker.id=0,broker.id不得重复,整个集群中唯一。)

scp -r /usr/local/kafka root@linux-103:/usr/local/

在这里插入图片描述
在这里插入图片描述

6)配置环境变量

(1)在/etc/profile 文件中增加kafka环境变量配置

在这里插入图片描述

增加如下内容:

#kafka
export KAFKA_HOME=/usr/local/kafka
export PATH=$PATH:$KAFKA_HOME/bin

在这里插入图片描述

(2)刷新一下环境变量。

在这里插入图片描述

(3)分发环境(只针对集群)变量文件到其他节点,并source。

在这里插入图片描述

7)启动集群

(1)先启动Zookeeper集群,然后启动Kafka。

cd /usr/local/zookeeper/bin/./zkServer.sh start./zkServer.sh statuscd /usr/local/kafka/bin/./kafka-server-start.sh -daemon /usr/local/kafka/config/server.propertiesjps

在这里插入图片描述

在这里插入图片描述

(2)依次在linux-102、linux-103、linux-104节点上启动Kafka。(针对集群)(如同上述启动)

注意:配置文件的路径要能够到server.properties。

8)关闭(集群)

./kafka-server-stop.sh

在这里插入图片描述

2.2.3 集群启停脚本

1)在/home/bin目录下创建文件kf.sh脚本文件(没有bin文件夹则创建文件夹)

在这里插入图片描述

脚本如下:

#! /bin/bashcase $1 in
"start"){#集群#for i in linux-102 linux-103 linux-104#单节点for i in linux-102 doecho " --------启动 $i Kafka-------"ssh $i "/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties"done
};;
"stop"){#集群#for i in linux-102 linux-103 linux-104#单节点for i in linux-102doecho " --------停止 $i Kafka-------"ssh $i "/usr/local/kafka/bin/kafka-server-stop.sh "done
};;
esac

在这里插入图片描述

2)添加执行权限

chmod +x kf.sh

在这里插入图片描述

3)启动集群命令

kf.sh start

在这里插入图片描述

4)停止集群命令

./kf.sh stop

在这里插入图片描述

注意:停止Kafka集群时,一定要等Kafka所有节点进程全部停止后再停止Zookeeper集群。因为Zookeeper集群当中记录着Kafka集群相关信息,Zookeeper集群一旦先停止,Kafka集群就没有办法再获取停止进程的信息,只能手动杀死Kafka进程了。

2.3 Kafka命令行操作

2.3.1 主题命令行操作

1)查看操作主题命令参数

./kafka-topics.sh

在这里插入图片描述

参数描述
- -bootstrap-server <String: server toconnect to>连接的Kafka Broker主机名称和端口号。
- -topic <String: topic>操作的topic名称。
- - create创建主题。
- - delete删除主题。
- - alter修改主题。
- - list查看所有主题。
- - describe查看主题详细描述。
- - partitions <Integer: # of partitions>设置分区数。
- - replication-factor<Integer: replication factor>设置分区副本。
- - config <String: name=value>更新系统默认的配置。

2)查看当前服务器中的所有 topic(其中 9092 是kafka的默认端口)

./kafka-topics.sh --bootstrap-server linux-102:9092 --list
#一般是生产环境
./kafka-topics.sh --bootstrap-server linux-102:9092,linux-103:9092 --list

在这里插入图片描述

3)创建 first topic

./kafka-topics.sh --bootstrap-server linux-102:9092 --topic first --create --partitions 1 --replication-factor 1./kafka-topics.sh --bootstrap-server linux-102:9092 --list

在这里插入图片描述

选项说明:

--topic 定义topic名
--partitions  定义分区数
--replication-factor  定义副本数

4)查看first主题的详情

./kafka-topics.sh --bootstrap-server linux-102:9092 --describe --topic first

在这里插入图片描述

5)修改分区数(注意:分区数只能增加,不能减少
6)再次查看first主题的详情

./kafka-topics.sh --bootstrap-server linux-102:9092 --alter --topic first --partitions 2./kafka-topics.sh --bootstrap-server linux-102:9092 --describe --topic first

在这里插入图片描述

7)删除 topic,删除后再次查看还有没有 topic

./kafka-topics.sh --bootstrap-server linux-102:9092 --delete --topic first./kafka-topics.sh --bootstrap-server linux-102:9092 --list

在这里插入图片描述

2.3.2 生产者命令行操作

操作:开两个窗口,一个作为生产者,一个作为消费者,当在生产者窗口命令输入的时候,消费者窗口就会自动输出(附截图最后)。

1)查看操作生产者命令参数

kafka-console-producer.sh

在这里插入图片描述

参数描述
- -bootstrap-server <String: server toconnect to>连接的Kafka Broker主机名称和端口号。
- -topic <String: topic>操作的topic名称。

2)发送消息

2.3.3 消费者命令行操作

1)查看操作消费者命令参数

./kafka-console-consumer.sh

在这里插入图片描述

参数描述
- -bootstrap-server <String: server toconnect to>连接的Kafka Broker主机名称和端口号。
- -topic <String: topic>操作的topic名称。
- -from-beginning从头开始消费。
- -group <String: consumer group id>指定消费者组名称。

2)消费消息
(1)消费first主题中的数据。

./kafka-console-consumer.sh --bootstrap-server linux-102:9092 --topic first

在这里插入图片描述

(2)把主题中所有的数据都读取出来(包括历史数据)。

./kafka-console-consumer.sh --bootstrap-server linux-102:9092 --from-beginning  --topic first

在这里插入图片描述

2.3.4 生产者生产消费者消费

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浙大数据结构慕课课后题(04-树5 Root of AVL Tree)

题目要求&#xff1a; AVL 树是一种自平衡的二叉搜索树。在 AVL 树中&#xff0c;任何节点的两个子子树的高度最多相差一;如果在任何时候它们相差不止一&#xff0c;则进行重新平衡以恢复此属性。图 1-4 说明了旋转规则。 图1 图2 图3 图4 现在给定一系列插入&#xff0c;您应该…

【经验总结】ShardingSphere5.2.1 + Springboot 分库分表 快速开始

Sharding Sphere 官方文档地址&#xff1a; https://shardingsphere.apache.org/document/current/cn/overview/maven仓库&#xff1a;https://mvnrepository.com/artifact/org.apache.shardingsphere/shardingsphere-jdbc 官方的文档写的很详尽到位&#xff0c;这里会截取部分…

Spring事务管理:程序化 vs 声明式

Spring事务管理&#xff1a;程序化 vs 声明式 1、程序化事务管理2、声明式事务管理3、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; Spring框架为事务管理提供了两种主要方式&#xff1a;程序化事务管理和声明式事务管理。 1、程序化…

【数据结构】六、图:3.十字链表、邻接多重表、边集数组

3.十字链表&#xff08;有向图&#xff09; 文章目录 3.十字链表&#xff08;有向图&#xff09;3.1性能分析 4.邻接多重表&#xff08;无向图&#xff09;4.1性能分析 5.边集数组 十字链表是有向图的一种链式存储结构。 不足 对于有向图来说&#xff0c;邻接表是有缺陷的。了…

Go语言fmt包中print相关方法

Go语言的fmt包提供了多种打印相关的函数&#xff0c;主要用于在控制台或其他输出目标上格式化并输出数据。下面是一些常用的print相关方法的用途和区别&#xff1a; 1.fmt.Print() 功能: fmt.Print() 将参数的内容按默认格式输出到标准输出&#xff08;通常是控制台&#xff…

【从零开始一步步学习VSOA开发】发布订阅服务端

发布订阅服务端 概念 **发布订阅模式&#xff08;Publish-Subscribe Pattern&#xff09;**是一种消息传递模式&#xff0c;其中发布者发布消息&#xff0c;而订阅者接收和处理这些消息。它是一种松耦合的通信方式&#xff0c;允许发布者和订阅者在不知道彼此存在的情况下进行…

【C++】面向对象三大特性之—— 多态(从底层带你理解多态)

目录 前言 什么是多态 多态的定义及实现 虚函数 虚函数的重写 多态的构成条件 虚函数重写的两个例外 协变 析构函数的重写&#xff08;重要&#xff01;&#xff01;&#xff01;&#xff09; override 和 final&#xff08;了解&#xff09; override final 重载、…

linux 查看端口占用并处理

lsof 命令 lsof -i:端口注意pid netstat 命令 netstat -tnpla | grep 端口注意pid 查看详情 ps -ef | grep 3766607删除 kill -9 PIDkill -9 3766607

【整数规划】+【0—1规划】解决优化类问题(Matlab代码)

目录 文章目录 前言 一、整数规划 分类&#xff1a; 二、典例讲解 1.背包问题 2.指派问题 总结 前言 如果觉得本篇文章还不错的话&#xff0c;给作者点个赞鼓励一下吧&#x1f601;&#x1f601;&#x1f601; 在规划问题中&#xff0c;有些最优解可能是分数或小数&am…

SpringBoot+Vue3+SSE实现实时消息语音播报

目录 1、前言 2、什么是SSE 2.1、与WebSocket有什么异同&#xff1f; 3、代码实现 3.1、前置代码 3.2、SSE相关代码 3.3、消息类相关代码 3.4 、前端代码 4、实机演示 1、前言 有这样一个业务场景&#xff0c;比如有一个后台管理系统&#xff0c;用来监听订单的更新&…

【NUCLEO-G071RB】010——TIM6-基本定时器

NUCLEO-G071RB&#xff1a;010——TIM6-基本定时器 基本定时器设计目标芯片配置程序修改运行测试 基本定时器 基本定时器只能用于计时&#xff0c;可以配置有无上溢出中断&#xff0c;它基本到不支持下溢出中断。它的时钟源&#xff08;应该&#xff09;是TPCLK&#xff0c;内…

ChatGPT首次被植入人类大脑:帮助残障人士开启对话

马斯克在脑机接口中最强大的竞争对手Synchron有了新的技术进展&#xff0c;他们首次将ChatGPT整合到其脑机系统中&#xff0c;以使瘫痪患者更容易控制他们的数字设备。Synchron凭借其独特的脑机接口&#xff08;BCI&#xff09;技术脱颖而出&#xff0c;该技术巧妙地运用了成熟…

【npm】如何将自己的插件发布到npm上

前言 简单说下 npm 是什么&#xff1a; npm 是一个 node 模块管理工具&#xff0c;也是全球最大的共享源。 npm 工具与 nodejs 配套发布&#xff0c;便利开发人员共享代码。npm 主要包括 npm 官方网站、CLI&#xff08;控制台命令行工具&#xff09;、和 registry&#xff08;…

「Pytorch」BF16 Mixed Precision Training

在深度学习领域&#xff0c;神经网络的训练性能瓶颈常常出现在 GPU显存的使用上。主要表现为两方面&#xff1a; 单卡上可容纳的模型和数据量有限&#xff1b;显存与计算单元之间的带宽和延迟限制了运算速度&#xff1b; 为了解决显卡瓶颈的问题&#xff0c;涌现了不同的解决…

Arduino控制带编码器的直流电机速度

Arduino DC Motor Speed Control with Encoder, Arduino DC Motor Encoder 作者 How to control dc motor with encoder:DC Motor with Encoder Arduino, Circuit Diagram:Driving the Motor with Encoder and Arduino:Control DC motor using Encoder feedback loop: How …

深度学习碎碎念——碎片知识1

1、什么叫模型收敛&#xff1f;什么叫模型欠拟合和过拟合&#xff1f; 什么叫模型收敛&#xff1f;——模型收敛是指在训练过程中&#xff0c;模型的损失函数逐渐减小并且趋于稳定的状态。简而言之&#xff0c;当模型的训练过程达到一个稳定的点&#xff0c;使得进一步的训练不…

CV党福音:YOLOv8实现语义分割(一)

前面我们得知YOLOv8不但可以实现目标检测任务&#xff0c;还包揽了分类、分割、姿态估计等计算机视觉任务。在上一篇博文中&#xff0c;博主已经介绍了YOLOv8如何实现分类&#xff0c;在这篇博文里&#xff0c;博主将介绍其如何将语义分割给收入囊中。 YOLOv8语义分割架构图 …

【C++】特殊类的设计与类型转换

文章目录 1. 特殊类的设计1.1 不能被拷贝的类1.2 只能在堆上创建对象的类1.3 只能在栈上创建对象的类1.4 不能被继承的类1.5 只能创建一个对象的类&#xff08;单列模式&#xff09; 2. 类型转换2.1 C/C的类型转换2.2 C规定的四种类型转换2.2.1 static_cast2.2.2 reinterpret_c…

【吊打面试官系列-Elasticsearch面试题】对于 GC 方面,在使用 Elasticsearch 时要注意什么?

大家好&#xff0c;我是锋哥。今天分享关于 【对于 GC 方面&#xff0c;在使用 Elasticsearch 时要注意什么&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 对于 GC 方面&#xff0c;在使用 Elasticsearch 时要注意什么&#xff1f; 1、SEE 2、倒排词典的索引需…

vue3使用pnpm运行项目但是运行不起来

运行项目的时候发现根本运行不起来了 尝试过创建.npmr文件 删除node_modules重新下 但是都出现问题了 创建.npmr&#xff1a;不管用 删除node_modules重新下&#xff1a;文字编译乱码&#xff0c;utf-8可能解析处理问题 最后解决方法&#xff1a; 重新创建项目&#xff0…