Hadoop_Kafka安装

1. 安装部署

1.1 集群规划

hadoop102

hadoop103

hadoop104

zk

zk

zk

kafka

kafka

kafka

1.2 jar包下载

http://kafka.apache.org/downloads

1.3 集群部署

1)解压安装包

[muzili@hadoop102 software]$ tar -zxvf kafka_2.11-2.4.1.tgz -C /opt/module/

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

[muzili@hadoop102 module]$ mv kafka_2.11-2.4.1/ kafka

3)在/opt/module/kafka目录下创建logs文件夹

[muili@hadoop102 kafka]$ mkdir logs

4)修改配置文件

[muzili@hadoop102 kafka]$ cd config/
[muzili@hadoop102 config]$ vi server.properties
修改或者增加以下内容:
#broker的全局唯一编号,不能重复
broker.id=0
#删除topic功能使能
delete.topic.enable=true
#kafka运行日志存放的路径
log.dirs=/opt/module/kafka/data
#配置连接Zookeeper集群地址
zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka

5)配置环境变量

[muzili@hadoop102 module]$ sudo vi /etc/profile.d/my_env.sh

#KAFKA_HOME

export KAFKA_HOME=/opt/module/kafka

export PATH=$PATH:$KAFKA_HOME/bin

[muzili@hadoop102 module]$ source /etc/profile.d/my_env.sh

6)分发安装包

[muzili@hadoop102 module]$ xsync kafka/

注意:分发之后记得配置其他机器的环境变量

7)分别在hadoop103和hadoop104上修改配置文件/opt/module/kafka/config/server.propertiesbroker.id=1broker.id=2

注:broker.id不得重复

8启动集群

依次在hadoop102、hadoop103、hadoop104节点上启动kafka

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

9)关闭集群

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

2. Kafka集群启动停止脚本

(1)在/home/muzili/bin目录下创建脚本kf.sh

[muzili@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 stop"
    done
};;
esac

注:

  • 启动Kafka之前需要启动zookeeper
  • 如果不行,可以在前面加source /etc/profile.d/my_env.sh,使环境变量生效。

(2)增加脚本执行权限

[muzili@hadoop102 bin]$ chmod u+x kf.sh

(3)kf集群启动脚本

[muzili@hadoop102 module]$ kf.sh start

(4)kf集群停止脚本

[muzili@hadoop102 module]$ kf.sh stop

3. Kafka常用命令

1)查看Kafka Topic列表

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

2创建Kafka Topic

进入到/opt/module/kafka/目录下创建日志主题

[muzili@hadoop102 kafka]$ bin/kafka-topics.sh --zookeeper hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka  --create --replication-factor 1 --partitions 1 --topic topic_log

3删除Kafka Topic

[muzili@hadoop102 kafka]$ bin/kafka-topics.sh --delete --zookeeper hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka --topic topic_log

4Kafka生产消息

[muzili@hadoop102 kafka]$ bin/kafka-console-producer.sh \

--broker-list hadoop102:9092 --topic topic_log

>hello world

>kafka  kafka

5Kafka消费消息

[muzili@hadoop102 kafka]$ bin/kafka-console-consumer.sh \

--bootstrap-server hadoop102:9092 --from-beginning --topic topic_log

--from-beginning会把主题中以往所有的数据都读取出来。根据业务场景选择是否增加该配置。

6)查看Kafka Topic详情

[muzili@hadoop102 kafka]$ bin/kafka-topics.sh --zookeeper hadoop102:2181/kafka \

--describe --topic topic_log

=================================附加知识=================================

4. 项目经验之Kafka机器数量计算

Kafka机器数量(经验公式)= 2 *(峰值生产速度 * 副本数 / 100)+ 1

先拿到峰值生产速度,再根据设定的副本数,就能预估出需要部署Kafka的数量。

1)峰值生产速度

峰值生产速度可以压测得到。

2)副本数

副本数默认是1个,在企业里面2-3个都有,2个居多。

副本多可以提高可靠性,但是会降低网络传输效率。

比如我们的峰值生产速度是50M/s。副本数为2。

Kafka机器数量 = 2 *(50 * 2 / 100)+ 1 = 3台

5. 项目经验之Kafka压力测试

1)Kafka压测

用Kafka官方自带的脚本,对Kafka进行压测。

kafka-consumer-perf-test.sh

kafka-producer-perf-test.sh

Kafka压测时,在硬盘读写速度一定的情况下,可以查看到哪些地方出现了瓶颈(CPU,内存,网络IO)。一般都是网络IO达到瓶颈。 

2)Kafka Producer压力测试

(1)压测环境准备

①hadoop102、hadoop103、hadoop104的网络带宽都设置为100mbps。

②关闭hadoop102主机,并根据hadoop102克隆出hadoop105(修改IP和主机名称)

③hadoop105的带宽不设限

④创建一个test topic,设置为3个分区2个副本

[muzili@hadoop102 kafka]$ bin/kafka-topics.sh --zookeeper hadoop102:2181,hadoop103:2181,hadoop104:2181/kafka --create --replication-factor 2 --partitions 3 --topic test

(2)在/opt/module/kafka/bin目录下面有这两个文件。我们来测试一下

[muzili@hadoop102 kafka]$ bin/kafka-producer-perf-test.sh  --topic test --record-size 100 --num-records 10000000 --throughput -1 --producer-props bootstrap.servers=hadoop102:9092,hadoop103:9092,hadoop104:9092

说明:

record-size:一条信息有多大,单位是字节。

num-records:总共发送多少条信息。

throughput:每秒多少条信息,设成-1,表示不限流,尽可能快的生产数据,可测出生产者最大吞吐量。

(3)Kafka会打印下面的信息

699884 records sent, 139976.8 records/sec (13.35 MB/sec), 1345.6 ms avg latency, 2210.0 ms max latency.

713247 records sent, 141545.3 records/sec (13.50 MB/sec), 1577.4 ms avg latency, 3596.0 ms max latency.

773619 records sent, 153862.2 records/sec (14.67 MB/sec), 2326.8 ms avg latency, 4051.0 ms max latency.

773961 records sent, 154206.2 records/sec (15.71 MB/sec), 1964.1 ms avg latency, 2917.0 ms max latency.

776970 records sent, 154559.4 records/sec (15.74 MB/sec), 1960.2 ms avg latency, 2922.0 ms max latency.

776421 records sent, 154727.2 records/sec (15.76 MB/sec), 1960.4 ms avg latency, 2954.0 ms max latency.

参数解析:Kafka的吞吐量15m/s左右是否符合预期呢?

hadoop102、hadoop103、hadoop104三台集群的网络总带宽30m/s左右,由于是两个副本,所以Kafka的吞吐量30m/s ➗ 2(副本) = 15m/s

结论:网络带宽和副本都会影响吞吐量。

(4)调整batch.size

batch.size默认值是16k。

batch.size较小,会降低吞吐量。比如说,批次大小为0则完全禁用批处理,会一条一条发送消息);

batch.size过大,会增加消息发送延迟。比如说,Batch设置为64k,但是要等待5秒钟Batch才凑满了64k,才能发送出去。那这条消息的延迟就是5秒钟。

[muzili@hadoop102 kafka]$ bin/kafka-producer-perf-test.sh  --topic test --record-size 100 --num-records 10000000 --throughput -1 --producer-props bootstrap.servers=hadoop102:9092,hadoop103:9092,hadoop104:9092 batch.size=500

输出结果

69169 records sent, 13833.8 records/sec (1.32 MB/sec), 2517.6 ms avg latency, 4299.0 ms max latency.

105372 records sent, 21074.4 records/sec (2.01 MB/sec), 6748.4 ms avg latency, 9016.0 ms max latency.

113188 records sent, 22637.6 records/sec (2.16 MB/sec), 11348.0 ms avg latency, 13196.0 ms max latency.

108896 records sent, 21779.2 records/sec (2.08 MB/sec), 12272.6 ms avg latency, 12870.0 ms max latency.

(5)linger.ms

如果设置batch size为64k,但是比如过了10分钟也没有凑够64k,怎么办?

可以设置,linger.ms。比如linger.ms=5ms,那么就是要发送的数据没有到64k,5ms后,数据也会发出去。

(6)总结

同时设置batch.size和 linger.ms,就是哪个条件先满足就都会将消息发送出去

Kafka需要考虑高吞吐量与延时的平衡。

3)Kafka Consumer压力测试

(1)Consumer的测试,如果这四个指标(IO,CPU,内存,网络)都不能改变,考虑增加分区数来提升性能。

[muzili@hadoop102 kafka]$ bin/kafka-consumer-perf-test.sh --broker-list hadoop102:9092,hadoop103:9092,hadoop104:9092 --topic test --fetch-size 10000 --messages 10000000 --threads 1

①参数说明:

--broker-list指定Kafka集群地址

--topic 指定topic的名称

--fetch-size 指定每次fetch的数据的大小

--messages 总共要消费的消息个数

②测试结果说明:

start.time, end.time, data.consumed.in.MB, MB.sec, data.consumed.in.nMsg, nMsg.sec

2021-08-03 21:17:21:778, 2021-08-03 21:18:19:775, 514.7169, 8.8749, 5397198, 93059.9514

开始测试时间,测试结束数据,共消费数据514.7169MB,吞吐量8.8749MB/s

(2)调整fetch-size

①增加fetch-size值,观察消费吞吐量。

[muzili@hadoop102 kafka]$ bin/kafka-consumer-perf-test.sh --broker-list hadoop102:9092,hadoop103:9092,hadoop104:9092 --topic test --fetch-size 100000 --messages 10000000 --threads 1

②测试结果说明:

start.time, end.time, data.consumed.in.MB, MB.sec, data.consumed.in.nMsg, nMsg.sec

2021-08-03 21:22:57:671, 2021-08-03 21:23:41:938, 514.7169, 11.6276, 5397198, 121923.7355

(3)总结

吞吐量受网络带宽和fetch-size的影响

6. 项目经验值Kafka分区数计算

(1)创建一个只有1个分区的topic

(2)测试这个topicproducer吞吐量和consumer吞吐量。

(3)假设他们的值分别是TpTc,单位可以是MB/s

(4)然后假设总的目标吞吐量是Tt,那么分区数 = Tt / minTpTc

例如:producer吞吐量 = 20m/sconsumer吞吐量 = 50m/s,期望吞吐量100m/s

分区数 = 100 / 20 = 5分区

https://blog.csdn.net/weixin_42641909/article/details/89294698

分区数一般设置为:3-10

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据翻身

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值