kafka安装详细步骤

Kafka成员:
Topic: kafka对消息保存时根据Topic进行归类,可以理解成一个队列
Producer:消息发送者
Consumer:消息接受者
Kafka集群:多个kafka实例组成。每个实例(server)称为broker
Partition:划分,为了实现扩展性,一个非常大的topic可以分布到多个broker中,一个topic可以分为多个partition,
Leader:主
Follower:从
Kafka集群部署:
需要素材:
jdk-8u221-linux-x64.tar.gz linux版本的jdk
FinalShell finalShell管理工具
VMware 虚拟机管理工具
CentOS-7-x86_64-DVD-1708.iso linux镜像
kafka_2.11-0.11.0.2.tgz kafka安装包
Linux安装
1、文件 –> 新建虚拟机 –> 选择典型 –>单击下一步
在这里插入图片描述
2、选择Linux镜像
在这里插入图片描述
3、虚拟机名与安装地址根据个人情况修改即可(尽量不用中文字符)
一直下一步,到虚拟机启动
4、选择中文
在这里插入图片描述
5、设置网络(不设置会导致虚拟机无法上网)
点击 网络和主机名(N)
在这里插入图片描述
1、打开网络
2、点击配置(根据实际网络进行配置)
在这里插入图片描述
3、修改ipv4地址
在这里插入图片描述
4、完成保存,网络设置完毕
5、设置root密码(以后启动虚拟机需要)
在这里插入图片描述
6、等待安装
7、设置网络模式为桥接,虚拟机安装完成在这里插入图片描述

Java JDK安装
1、使用FinalShell连接安装完成的Linux(注意:使用前先登录虚拟机)
名称:根据个人爱好设置
主机:虚拟机的ip地址。就是Linux安装第5步所设置的ip地址
端口:22
用户名:root (默认)
在这里插入图片描述
2、向虚拟机上传jdk镜像
点击上传按钮(1),选择对应的jdk
在这里插入图片描述
3、解压安装包

[root@localhost local]# tar -zxvf jdk-8u181-linux-x64.tar.gz

注意:linux命令:
ls:查看文件夹下的文件
cd:切换目录。
执行命令时要确保jdk在当前目录下,否则无法执行

4、配置环境变量

[root@localhost local]# sudo vi /etc/profile

在打开的文件中添加内容:

export JAVA_HOME=/root/jdk1.8.0_181  #jdk安装目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}

注意:
export JAVA_HOME= 后面是jdk解压后的目标
在打开文件后,点击字母键i开始编辑文档,点击esc后输入 :wq 保存并退出

5、使用最新的配置并测试

[root@bogon ~]# source /etc/profile #使用最新配置的环境变量
[root@bogon ~]#java //使用java与javac出现大量参数,表示环境配置成功
[root@bogon ~]#javac

参考资源:https://blog.csdn.net/pdsu161530247/article/details/81582980
Kafka集群的配置
经过上面的操作,kafka需要的环境已经搭建好了,下面开始进行配置
1、解压安装包
1)使用FinalShell将kafka的安装包kafka_2.11-0.11.0.2.tgz上传到服务器(使用ls在目录会看见安装包)
2)解压压缩包:[root@bogon ~]# tar -zxvf kafka_2.11-0.11.0.2.tgz
注意:解压完在当前目录会有一个新的文件夹
3)修改解压后的文件名:[root@bogon ~]# mv kafka_2.11-0.11.0.2 kafka
2、修改配置文件
1)在kafka目录创建logs文件夹:[root@bogon kafka]# mkdir logs
2)打开配置文件
2.1)通过finalShell找到 config下的server.properties 文件,双击打开(推荐)
2.2)使用命令打开

[root@bogon kafka]# cd config/  #切换到config目录
[root@bogon config]# vi server.properties //打开server.properties文件

3)修改配置文件

#broker的全局唯一编号,不能重复。三台broker应该id不同
broker.id=0
#删除topic功能使能
delete.topic.enable=true
#处理网络请求的线程数量
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运行日志存放的路径,这就是创建的logs文件夹	,可以用逗号 , 分隔多个文件夹。
#根据最小使用原则,把同一个分区的日志片段保存到同一个路径下。Broker会往拥有最小数目分区的路径新增分区。
log.dirs=/opt/module/kafka/logs
#topic在当前broker上的分区个数
num.partitions=1
#用来恢复和清理data下数据的线程数量。对于大量分区的服务器来说,开启多个线程会省下大量加载/恢复时间。
#注意,一个log.dirs目录就会开启n个线程,如果此参数为3,而log.idrs有8个。会创建3*8=24个线程
num.recovery.threads.per.data.dir=1
#segment文件保留的最长时间,超时将被删除
log.retention.hours=168
#配置连接Zookeeper集群地址,hadoop102是主机名,可以换成ip地址
zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181,192.168.1.111:2181

3、配置kafka环境变量

atguigu@hadoop102 module]$ sudo vi /etc/profile

#KAFKA_HOME
export KAFKA_HOME=/root/kafka
export PATH=$PATH:$KAFKA_HOME/bin

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

4、分发安装包(也就是将本主机的kafka文件夹传递给其他主机)
1)在/usr/local/bin目录下创建xsync文件,并向内添加

   创建文件并打开:
[root@bogon /]# cd usr/local/bin/
[root@bogon bin]# touch xsync
[root@bogon bin]# vi xsync 
注意:可以使用finalShell工具打开(推荐)

2)添加内容

#!/bin/sh
# 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
        echo no args...;
        exit;
fi
# 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
# 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
# 获取当前用户名称
user=`whoami`
# 循环
for((host=1; host<=1; host++)); do
        echo $pdir/$fname $user@192.168.1.11$host:$pdir
        echo ==================slave$host==================
        rsync -rvl $pdir/$fname $user@192.168.1.11$host:$pdir
done
#Note:这里的slave对应自己主机名,需要做相应修改。另外,for循环中的host的边界值由自己的主机编号决定。

注意:实际分发的是 192.168.1.11+1 做了个拼接。这样当有多台时,只要ip相连。就可以循环解决
3)[root@bogon bin]# chmod a+x xsync #给文件添加执行权限

4)使用xsync分发:

[atguigu@hadoop102 module]$ xsync kafka/

遇见报错:rsync没有找到,输入 yum install rsync –y 下载资源后重试
5)根据要求,输入yes及目标服务器的密码
6)分发之后记得配置1)其他机器的环境变量,2)修改/kafka/config/server.properties文件的broker:id
不能重复
分发安装包参考:https://blog.csdn.net/perfer258/article/details/81433622
5、关闭防火墙
每台服务器:service firewalld stop;还有一个防火墙
关闭:setenforce 0
查看状态:service firewalld status;
6、启动zookeeper(每个终端都要运行)
kafka用到zookeeper,因此如果您的机器上没有zookeeper服务,则需要先启动zookpeer服务,本文使用kafka自带的zookeeper。

cd /opt/kafka_2.11-1.1.0/
bin/zookeeper-server-start.sh config/zookeeper.properties

因日志较多,所以只给出前几行信息和最后一行成功的信息

[2018-05-21 12:17:44,461] INFO Reading configuration from: config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2018-05-21 12:17:44,472] INFO autopurge.snapRetainCount set to 3 (org.apache.zookeeper.server.DatadirCleanupManager)
...
[2018-05-21 12:17:44,844] INFO binding to port 0.0.0.0/0.0.0.0:2181 (org.apache.zookeeper.server.NIOServerCnxnFactory)

可以看到zookeeper服务的端口为2181
7、启动kafka(每个终端都要运行)
启动kafka服务

bin/kafka-server-start.sh config/server.properties

成功后提示:

[2018-05-21 12:21:07,901] INFO Registered kafka:type=kafka.Log4jController MBean (kafka.utils.Log4jControllerRegistration$)
[2018-05-21 12:21:09,417] INFO starting (kafka.server.KafkaServer)
[2018-05-21 12:21:09,419] INFO Connecting to zookeeper on localhost:2181 (kafka.server.KafkaServer)
...
[2018-05-21 12:21:15,955] INFO [KafkaServer id=0] started (kafka.server.KafkaServer)

其中kafka的端口为9092,在下面这条信息可以看到

INFO       Registered       broker       0       at       path       /brokers/ids/0       with        addresses: 
ArrayBuffer(EndPoint(ambari.master.com,9092,ListenerName(PLAINTEXT),PLAINTEXT)) (kafka.zk.KafkaZkClient)

Kafka简单命令的使用(单节点):
1)查看当前服务器中的所有topic

[atguigu@hadoop102 kafka]$ bin/kafka-topics.sh --zookeeper hadoop102:2181 --list

2)创建topic

[atguigu@hadoop102 kafka]$ bin/kafka-topics.sh --zookeeper localhost:2181 --create --replication-factor 1 --partitions 1 --topic first

选项说明:
–topic 定义topic名
–replication-factor 定义副本数(很可能和集体的数量有关,这里是单节点使用1表示)
–partitions 定义分区数
3)删除topic

[atguigu@hadoop102 kafka]$ bin/kafka-topics.sh --zookeeper hadoop102:2181 --delete --topic first

需要server.properties中设置delete.topic.enable=true否则只是标记删除或者直接重启。
4)发送消息

[atguigu@hadoop102 kafka]$ bin/kafka-console-producer.sh --broker-list hadoop102:9092 --topic first
>hello world
>atguigu  atguigu

5)消费消息

[atguigu@hadoop103 kafka]$ bin/kafka-console-consumer.sh --zookeeper hadoop102:2181 --from-beginning --topic first
--from-beginning:会把first主题中以往所有的数据都读取出来。根据业务场景选择是否增加该配置。

6)查看某个Topic的详情

[atguigu@hadoop102 kafka]$ bin/kafka-topics.sh --zookeeper hadoop102:2181 \
--describe --topic first

资源:Kafka 连接java https://b dn.net/yuyecsdn/article/details/90256011
Kafka安装与操作资源:https://blog.csdn.net/dkl12/article/details/80413688

Producer写入流程:
在这里插入图片描述

[atguigu@hadoop102 kafka]$ bin/kafka-console-producer.sh --broker-list hadoop102:9092 --topic first

生产者向leader发送消息
1、生产者(producer)向kafka集群获取该partition(topicr)的leader
从发送语句看,只是指定了topic,已知一个topic可能分布在多个broker(主机)上,其中一个leader与多个followers。要先获取leader的位置
2、producer(生产者)向leader(第一步获取的)发送消息
kafka cluster(kafka集群)存储消息
存储消息要讲一下ack,这个参数分别为 0,1,all
当为0时,生产者发送完消息就不管了,继续发送下一条数据。
当为1时,生产者发送完消息并且leader写入完成后,由leader返回ack后,再继续发送下一条数据。
当为all时,生产者发送完消息并且leader写入完成后,再由followers写入完成后。Followers向leader传递ack,再由leader向生产者传递ack,生产者才能断续发送。上图就是当为all时的传递路径

可见为0时,效率最高,但是不安全。为all时最安全,但是效率低

存储消息的过程为:
Producer(生产者)发送消息->leader写入消息->followers写入消息(followers为多个)
在这个过程中并返回ack

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值