甘肃省住房与城乡建设部网站,专业网站开发开发,网站招聘怎么做,免费空间能放网站吗#x1f33b;#x1f33b; 目录 一、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 集群… 目录 一、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 消息队列 目前企业中比较常见的消息队列产品主要有Kafka、ActiveMQ、RabbitMQ、RocketMQ等。在大数据场景主要采用Kafka作为消息队列。在JavaEE开发中主要采用ActiveMQ、RabbitMQ、RocketMQ 作为消息队列。 1.2.1 消息队列内部实现原理
消息队列非kafka内部实现原理 1.2.2 传统消息队列的应用场景 传统的消息队列的主要应用场景包括缓存/消峰消去峰值、解耦和异步通信。 消息队列的应用场景——缓存/消峰 消息队列的应用场景——解耦 消息队列的应用场景——异步通信 1.2.3 消息队列的两种模式 1.3 Kafka 基础架构 1Producer消息生产者就是向Kafka broker发消息的客户端。2Consumer消息消费者向Kafka broker取消息的客户端。3Consumer GroupCG消费者组由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据一个分区只能由一个组内消费者消费消费者组之间互不影响。所有的消费者都属于某个消费者组即消费者组是逻辑上的一个订阅者。4Broker一台Kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。5Topic可以理解为一个队列生产者和消费者面向的都是一个topic。6Partition为了实现扩展性一个非常大的topic可以分布到多个broker即服务器上一个topic可以分为多个partition每个partition是一个有序的队列。7Replica副本。一个topic的每个分区都有若干个副本一个Leader和若干个Follower。8Leader每个分区多个副本的“主”生产者发送数据的对象以及消费者消费数据的对象都是Leader。9Follower每个分区多个副本中的“从”实时从Leader中同步数据保持和Leader数据的同步。Leader发生故障时某个Follower会成为新的Leader。 抽象理解 (生产者消费者) 生产者消费者生产者生产鸡蛋消费者消费鸡蛋生产者生产一个鸡蛋消费者就消费一个鸡蛋假设消费者消费鸡蛋的时候噎住了系统宕机了生产者还在生产鸡蛋那新生产的鸡蛋就丢失了。再比如生产者很强劲大交易量的情况生产者1秒钟生产100个鸡蛋消费者1秒钟只能吃50个鸡蛋那要不了一会消费者就吃不消了消息堵塞最终导致系统超时消费者拒绝再吃了”鸡蛋“又丢失了。这个时候我们放个篮子在它们中间生产出来的鸡蛋都放到篮子里消费者去篮子里拿鸡蛋这样鸡蛋就不会丢失了都在篮子里。 上面的例子里面: 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.02.镜像的安装CentOS-7.5-x86_64-DVD-1804.iso3.JDK的安装: jdk-8u212-linux-x64.tar.gz4.Hadoop的安装: hadoop-3.1.3.tar.gz 2.2.1 集群规划
linux-102linux-103linux-104zkzkzkkafkakafkakafka
2.2.2 单节点或集群部署 0官方下载 获取 1本地资源下载获取上面网盘获取2上传压缩包到服务器 /usr/local下面并且进行解压 tar -zxvf kafka_2.12-3.0.0.tgz3修改解压后的文件名称到当前目录下
mv kafka_2.12-3.0.0 kafka4进入到/usr/local/kafka/config目录修改配置文件 server.properties 如下③ 处地方并保存。
vi server.properties① ② ③ 创建文件夹 datas 5分发安装包针对上述集群配置注分发后配置里面的这个需要依次改动 broker.id0broker.id不得重复整个集群中唯一。
scp -r /usr/local/kafka rootlinux-103:/usr/local/6配置环境变量
1在/etc/profile 文件中增加kafka环境变量配置 增加如下内容
#kafka
export KAFKA_HOME/usr/local/kafka
export PATH$PATH:$KAFKA_HOME/bin2刷新一下环境变量。 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.propertiesjps2依次在linux-102、linux-103、linux-104节点上启动Kafka。(针对集群)(如同上述启动)
注意配置文件的路径要能够到server.properties。
8关闭集群
./kafka-server-stop.sh2.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.propertiesdone
};;
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
};;
esac2添加执行权限
chmod x kf.sh3启动集群命令
kf.sh start4停止集群命令
./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-factorInteger: replication factor设置分区副本。- - config String: namevalue更新系统默认的配置。
2查看当前服务器中的所有 topic其中 9092 是kafka的默认端口
./kafka-topics.sh --bootstrap-server linux-102:9092 --list
#一般是生产环境
./kafka-topics.sh --bootstrap-server linux-102:9092,linux-103:9092 --list3创建 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 first5修改分区数注意分区数只能增加不能减少 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 first7删除 topic删除后再次查看还有没有 topic
./kafka-topics.sh --bootstrap-server linux-102:9092 --delete --topic first./kafka-topics.sh --bootstrap-server linux-102:9092 --list2.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 first2把主题中所有的数据都读取出来包括历史数据。
./kafka-console-consumer.sh --bootstrap-server linux-102:9092 --from-beginning --topic first2.3.4 生产者生产消费者消费