大数据Kafka--概述

文章目录

  • 概述
    • 定义
    • 消息队列
      • 传统消息队列的应用场景
      • 消息队列的两种模式
    • Kafka基础架构
  • Kafka快速入门
    • 安装部署
      • 集群规划
      • 集群部署
      • 集群启停脚本
    • Kafka命令行操作
      • 主题命令行操作
      • 生产者命令行操作
      • 消费者命令行操作

概述

定义

在这里插入图片描述

消息队列

目前企业中比较常见的消息队列产品主要有 Kafka、ActiveMQ、RabbitMQ、
RocketMQ等。

在大数据场景主要采用 Kafka作为消息队列。在 JavaEE开发中主要采用ActiveMQ、RabbitMQ、RocketMQ。

传统消息队列的应用场景

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

  • 缓存/消峰:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况
  • 解耦:允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束
    在这里插入图片描述
  • 异步通信:允许用户把一个消息放入队列,但并不立即处理它,然后在需要的时候再去处理它们

消息队列的两种模式

在这里插入图片描述

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。

Kafka快速入门

安装部署

集群规划

hadoop102hadoop103hadoop104
zkzkzk
kafkakafkakafka

集群部署

1)官方下载地址:https://kafka.apache.org/downloads.html

2)解压安装包

[yudan@hadoop102 software]$ tar -zxvf kafka_2.12-3.0.0.tgz -C /opt/module/ 

3)修改解压后的文件名称

[yudan@hadoop102 module]$ mv kafka_2.12-3.0.0/ kafka 

4)进入到/opt/module/kafka目录,修改配置文件

[yudan@hadoop102 kafka]$ cd config/ 
[yudan@hadoop102 config]$ vim server.properties

输入以下内容:

#broker的全局唯一编号,不能重复,只能是数字。 
broker.id=0 --需要修改的参数
#处理网络请求的线程数量 
num.network.threads=3 
#用来处理磁盘IO的线程数量 
num.io.threads=8 
#发送套接字的缓冲区大小 
socket.send.buffer.bytes=102400 
#接收套接字的缓冲区大小 
socket.receive.buffer.bytes=102400 
#请求套接字的缓冲区大小 
socket.request.max.bytes=104857600 
#kafka运行日志(数据)存放的路径,路径不需要提前创建,kafka自动帮你创建,可以配置多个磁盘路径,路径与路径之间可以用","分隔 
log.dirs=/opt/module/kafka/datas --需要修改的参数
#topic在当前broker上的分区个数 
num.partitions=1 
#用来恢复和清理data下数据的线程数量 
num.recovery.threads.per.data.dir=1 
# 每个topic创建时的副本数,默认时1个副本 
offsets.topic.replication.factor=1 
#segment文件保留的最长时间,超时将被删除 
log.retention.hours=168 
#每个segment文件的大小,默认最大1G 
log.segment.bytes=1073741824 
# 检查过期数据的时间,默认5分钟检查一次是否数据过期 
log.retention.check.interval.ms=300000 
#配置连接Zookeeper集群地址(在zk根目录下创建/kafka,方便管理) 
zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka --需要修改的参数

5)分发安装包

[yudan@hadoop102 module]$ xsync kafka/

6)分别在hadoop103和hadoop104上修改配置文件/opt/module/kafka/config/server.properties中的broker.id=1、broker.id=2

注:broker.id不得重复,整个集群中唯一。

[yudan@hadoop103 module]$ vim kafka/config/server.properties 
修改: 
# The id of the broker. This must be set to a unique integer for each broker. 
broker.id=1 

[yudan@hadoop104 module]$ vim kafka/config/server.properties 
修改: 
# The id of the broker. This must be set to a unique integer for each broker. 
broker.id=2 

7)配置环境变量

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

[yudan@hadoop102 module]$ sudo vim /etc/profile.d/my_env.sh

增加如下内容:

#KAFKA_HOME 
export KAFKA_HOME=/opt/module/kafka 
export PATH=$PATH:$KAFKA_HOME/bin 

(2)刷新一下环境变量

[yudan@hadoop102 module]$ source /etc/profile

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

[yudan@hadoop102 module]$ sudo /home/atguigu/bin/xsync /etc/profile.d/my_env.sh 
[yudan@hadoop103 module]$ source /etc/profile 
[yudan@hadoop104 module]$ source /etc/profile

8)启动集群

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

[yudan@hadoop102   kafka]$ zk.sh start 

(2)依次在hadoop102、hadoop103、hadoop104节点上启动Kafka。

[yudan@hadoop102 kafka]$ bin/kafka-server-start.sh -daemon config/server.properties 
[yudan@hadoop103 kafka]$ bin/kafka-server-start.sh -daemon config/server.properties 
[yudan@hadoop104 kafka]$ bin/kafka-server-start.sh -daemon config/server.properties

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

9)关闭集群

[yudan@hadoop102 kafka]$ bin/kafka-server-stop.sh  
[yudan@hadoop103 kafka]$ bin/kafka-server-stop.sh  
[yudan@hadoop104 kafka]$ bin/kafka-server-stop.sh 

集群启停脚本

1)在/home/atguigu/bin 目录下创建文件kf.sh 脚本文件

[yudan@hadoop102 bin]$ vim kf.sh

脚本如下:

#! /bin/bash 

case $1 in 
"start"){ 
for i in hadoop102 hadoop103 hadoop104 
do 
echo " --------启动 $i Kafka-------" 
ssh $i "/opt/module/kafka/bin/kafka-server-start.sh 
daemon /opt/module/kafka/config/server.properties" 
done 
};; 
"stop"){ 
for i in hadoop102 hadoop103 hadoop104 
do 
echo " --------停止 $i Kafka-------" 
ssh $i "/opt/module/kafka/bin/kafka-server-stop.sh " 
done 
};; 
esac 

2)添加执行权限

[yudan@hadoop102 bin]$ chmod 777 kf.sh

3)启动集群命令

[yudan@hadoop102 ~]$ kf.sh start 

4)停止集群命令

[yudan@hadoop102 ~]$ kf.sh stop

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

Kafka命令行操作

在这里插入图片描述

主题命令行操作

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

[yudan@hadoop102 kafka]$ bin/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

[yudan@hadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --list

3)创建first topic

[yudan@hadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --create --partitions 1 --replication-factor 3 --topic first
  • 选项说明:
    • –topic 定义 topic 名
    • –replication-factor 定义副本数
    • –partitions 定义分区数

4)查看first 主题的详情

[yudan@hadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --describe --topic first 

5)修改分区数(注意:分区数只能增加,不能减少)

[yudan@hadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --alter --topic first --partitions 3 

6)再次查看first主题的详情

[yudan@hadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --describe --topic first

7)删除topic

[yudan@hadoop102 kafka]$ bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --delete --topic first

生产者命令行操作

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

[yudan@hadoop102 kafka]$ bin/kafka-console-producer.sh
参数描述
--bootstrap-server要连接的 Kafka Broker 主机名称和端口号。
--topic操作的topic。

2)发送消息

[yudan@hadoop102 kafka]$ bin/kafka-console-producer.sh -bootstrap-server hadoop102:9092 --topic first 

>hello world 
>yudan yudan

消费者命令行操作

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

[yudan@hadoop102 kafka]$ bin/kafka-console-consumer.sh 
参数描述
--bootstrap-server<String: server toconnect to>连接的 Kafka Broker 主机名称和端口号。
--topic<String: topic> 操作的topic名称。
--from-beginning从头开始消费。如果设置此参数,消费者将从该topic的最开始位置开始消费消息
--group <String: consumer group id>指定消费者组名称

2)消费消息

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

[yudan@hadoop102 kafka]$ bin/kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic first

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

[yudan@hadoop102 kafka]$ bin/kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --from-beginning --topic first

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PLC_博图系列☞基本指令“插入输入”

PLC_博图系列☞基本指令“插入输入” 文章目录 PLC_博图系列☞基本指令“插入输入”背景介绍插入输入说明参数示例 关键字&#xff1a; PLC、 西门子、 博图、 Siemens 、 插入输入 背景介绍 这是一篇关于PLC编程的文章&#xff0c;特别是关于西门子的博图软件。我并不是专…

LeetCode每日刷题:101. 对称二叉树

题目&#xff1a; 解题思路&#xff1a;可以新写一个函数&#xff0c;从root开始&#xff0c;root的left的头结点将记为lefttree&#xff08;左子树&#xff09;,root的lright的头结点将记为righttree&#xff08;右子树&#xff09;&#xff0c; 然后递归左子树的root.left与右…

搭建sql-labs靶机环境

phpstudy&#xff08;小皮面板&#xff09; 先下载phpstudy&#xff08;小皮面板&#xff09;软件&#xff0c;方便我们快速搭建环境&#xff0c;该软件程序包集成最新的ApachePHPMySQLngix,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境.该程序不仅包括PHP调试…

C++笔记:OOP三大特性之继承

文章目录 一、继承的概念和定义1.1 概念1.2 定义格式1.3 继承关系和访问限定符 二、基类和派生类对象赋值兼容转换2.1 类型转换存在临时对象的意义2.2 赋值兼容转换不会产生临时变量 三、继承中的作用域四、派生类中的默认成员函数4.1 构造4.2 拷贝构造4.3 赋值重载4.4 析构 五…

【进程创建】

目录 进程创建的方式查看进程pid 调用系统调用创建子进程fock函数做了的工作子进程刚开始创建的状态 一个变量&#xff0c;两个不同的值创建子进程的作用 进程创建的方式 1.在操作系统上输入的指令。 2.已经启动的软件。 3.程序员在代码层面上调用系统调用创建进程。 linux中第…

centos6安装

前期准备 官网 选择download 选择isos 选择mininal.iso下载 安装 打开vmware 输入root和密码登录

Block Coordinate Descent算法的部分构造技巧

文章目录 构造的目的定理另一篇中对于该定理的表述出处 构造的目的 通过增加辅助变量&#xff0c;使原来的非凸问题变为关于各个变量的凸子问题&#xff0c;交替优化各个辅助变量。 定理 Define an m m m by m m m matrix function E ( U , V ) ≜ ( I − U H H V ) ( I …

工具分享:Corn表达式在线生成工具介绍

无极低码 &#xff1a;https://wheart.cn Corn表达式在线生成工具介绍 在现代的信息技术领域中&#xff0c;定时任务是一个不可或缺的功能。无论是为了定期清理缓存、发送邮件、还是执行其他自动化任务&#xff0c;我们都需要一个高效、便捷的定时工具。而在众多的定时工具中…

Microsoft PowerToys:自定义 Windows 的实用程序

Microsoft PowerToys&#xff1a;自定义 Windows 的实用程序 Microsoft PowerToys 是一组实用程序&#xff0c;供高级用户调整和简化其 Windows 体验以提高工作效率。 微软官方地址为&#xff1a;https://learn.microsoft.com/en-us/windows/powertoys/&#xff0c;其github源…

springboot207基于springboot的实习管理系统

实习管理系统的设计与实现 摘要 近年来&#xff0c;信息化管理行业的不断兴起&#xff0c;使得人们的日常生活越来越离不开计算机和互联网技术。首先&#xff0c;根据收集到的用户需求分析&#xff0c;对设计系统有一个初步的认识与了解&#xff0c;确定实习管理系统的总体功…

qt-OPENGL-星系仿真

qt-OPENGL-星系仿真 一、演示效果二、核心程序三、下载链接 一、演示效果 二、核心程序 #include "model.h"Model::Model(QOpenGLWidget *_glWidget) { glWidget _glWidget;glWidget->makeCurrent();initializeOpenGLFunctions(); }Model::~Model() {destroyV…

HashMap 源码学习-jdk1.8

1、一些常量的定义 这里针对MIN_TREEIFY_CAPACITY 这个值进行解释一下。 java8里面&#xff0c;HashMap 的数据结构是数组 &#xff08;链表或者红黑树&#xff09;&#xff0c;每个数组节点下可能会存在链表和红黑树之间的转换&#xff0c;当同一个索引下面的节点超过8个时…

Elastic Stack--01--简介、安装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. Elastic Stack 简介为什么要学习ESDB-Engines搜索引擎类数据库排名常年霸榜![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/051342a83f574c8c910cda…

【软件架构】02-复杂度来源

1、性能 1&#xff09;单机 受限于主机的CPU、网络、磁盘读写速度等影响 在多线程的互斥性、并发中的同步数据状态等&#xff1b; 扩展&#xff1a;硬件资源、增大线程池 2&#xff09;集群 微服务化拆分&#xff0c;导致调用链过长&#xff0c;网络传输的消耗过多。 集…

【Web前端笔记10】CSS3新特性

10 CSS3新特性 &#xff11;、圆角 &#xff12;、阴影 &#xff08;&#xff11;&#xff09;盒阴影 &#xff13;、背景渐变 &#xff08;&#xff11;&#xff09;线性渐变&#xff08;主要掌握这种就可&#xff09; &#xff08;&#xff12;&#xff09;径向渐变 &…

滚雪球学Java(67):深入理解 TreeMap:Java 中的有序键值映射表

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

C++学习之list容器

C++ list基本概念 在C++中,std::list是一个双向链表(doubly linked list)容器,它包含在 <list> 头文件中。下面是一些关于C++ std::list的基本概念: 双向链表结构:std::list是由多个节点组成的双向链表结构,每个节点包含数据元素和指向前一个节点和后一个节点的指…

ABCDE联合创始人BMAN确认出席Hack .Summit() 2024香港Web3盛会

ABCDE联合创始人和普通合伙人BMAN确认出席Hack .Summit() 2024&#xff01; ABCDE联合创始人和普通合伙人BMAN确认出席由 Hack VC 主办&#xff0c;并由 AltLayer 和 Berachain 联合主办&#xff0c;与 SNZ 和数码港合作&#xff0c;由 Techub News 承办的Hack.Summit() 2024区…

穿越Redis单线程迷雾:从面试场景到技术内核的解读

目录 ​编辑 前言 Redis中的多线程 I/O多线程 Redis中的多进程 结论 延伸阅读 前言 很多人都遇到过这么一道面试题&#xff1a;Redis是单线程还是多线程&#xff1f;这个问题既简单又复杂。说他简单是因为大多数人都知道Redis是单线程&#xff0c;说复杂是因为这个答案…

Kotlin学习 6

1.接口 interface Movable {var maxSpeed: Intvar wheels: Intfun move(movable: Movable): String}class Car(var name: String, override var wheels: Int 4, _maxSpeed: Int) : Movable {override var maxSpeed: Int _maxSpeedget() fieldset(value) {field value}overr…