《2020/07/22》kafka

kafka

1. 集群安装

需要事先安装好zookeeper。

1.1 jar包下载

http://kafka.apache.org/downloads.html

1.2 安装

  1. 解压缩安装包
    [lhcz@host-192-168-240-116 software]$ tar -zxvf kafka_2.11-0.11.0.0.tgz -C /opt/module/
    
  2. 修改解压后的文件名称
    [lhcz@host-192-168-240-116 module]$ mv kafka_2.11-0.11.0.0/ kafka
    
  3. 在/opt/module/kafka目录下创建logs文件夹
    [lhcz@host-192-168-240-116 kafka]$ mkdir logs
    
  4. 修改配置文件
    [lhcz@host-192-168-240-116 kafka]$ vim config/server.properties
    
    修改为以下内容:
    #broker的全局唯一编号,不能重复
    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运行日志存放的路径	
    log.dirs=/opt/module/kafka/logs
    #topic在当前broker上的分区个数
    num.partitions=1
    #用来恢复和清理data下数据的线程数量
    num.recovery.threads.per.data.dir=1
    #segment文件保留的最长时间,超时将被删除
    log.retention.hours=168
    #配置连接Zookeeper集群地址
    zookeeper.connect=hadoop116:2181,hadoop117:2181,hadoop118:2181
    
  5. 配置环境变量
    [lhcz@host-192-168-240-116 kafka]$ sudo vim /etc/profile.d/env.sh
    
    添加以下内容:
    #KAFKA_HOME
    export KAFKA_HOME=/opt/module/kafka
    export PATH=$PATH:$KAFKA_HOME/bin
    
    使环境生效
    [lhcz@host-192-168-240-116 kafka]$ source /etc/profile.d/env.sh
    
  6. 分发安装包
    [lhcz@host-192-168-240-116 module]$ xsync kafka
    注意:分发之后记得配置其他机器的环境变量
  7. 分别在hadoop117和hadoop118上修改配置文件/opt/module/kafka/config/server.properties中的broker.id=1、broker.id=2
    注:broker.id不得重复

1.3 Kafka集群启动停止脚本

  1. 在/home/lhcz/bin目录下创建脚本kf.sh
    vim kf.sh
    
    内容如下:
    #! /bin/bash 
    
    case $1 in 
    "start"){ 
    	for i in hadoop116 hadoop117 hadoop118 
    	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 hadoop116 hadoop117 hadoop118
    	do 
    		echo " --------停止 $i Kafka-------" 
    		ssh $i "/opt/module/kafka/bin/kafka-server-stop.sh stop" 
    	done 
    };; 
    esac
    
    添加执行权限
    chmod 777 kf.sh
    
  2. 启动脚本
    kf.sh start
  3. 停止脚本
    kf.sh stop

2. kafka命令行操作

2.1 查看Kafka Topic列表

[lhcz@host-192-168-240-116 kafka]$ bin/kafka-topics.sh --zookeeper hadoop116:2181 --list

2.2 创建Kafka Topic

进入到/opt/module/kafka/目录下分别创建:启动日志主题、事件日志主题。

  1. 创建启动日志主题
    [lhcz@host-192-168-240-116 kafka]$ bin/kafka-topics.sh --zookeeper hadoop116:2181,hadoop117:2181,hadoop118:2181  --create --replication-factor 1 --partitions 1 --topic topic_start
    

2.3 删除topic

	[lhcz@host-192-168-240-116 kafka]$ bin/kafka-topics.sh --delete --zookeeper hadoop116:2181,hadoop117:2181,hadoop118:2181 --topic topic_start

2.4 Kafka生产消息

[lhcz@host-192-168-240-116 kafka]$ bin/kafka-console-producer.sh \
--broker-list hadoop116:9092 --topic topic_start
>hello world
>atguigu  atguigu

2.5 Kafka消费消息

[lhcz@host-192-168-240-116 kafka]$ bin/kafka-console-consumer.sh \
--zookeeper hadoop116:2181 --from-beginning --topic topic_start

2.6 查看某个Topic的详情

[lhcz@host-192-168-240-116 kafka]$ bin/kafka-topics.sh --zookeeper hadoop116:2181 \
--describe --topic topic_start

3. kafka项目经验

3.1 Kafka压力测试

  1. Kafka压测
    用Kafka官方自带的脚本,对Kafka进行压测。Kafka压测时,可以查看到哪个地方出现了瓶颈(CPU,内存,网络IO)。一般都是网络IO达到瓶颈。
    kafka-consumer-perf-test.sh
    kafka-producer-perf-test.sh

  2. Kafka Producer压力测试
    在/opt/module/kafka/bin目录下。

    bin/kafka-producer-perf-test.sh  --topic test --record-size 100 --num-records 100000 --throughput 1000 --producer-props bootstrap.servers=hadoop116:9092,hadoop117:9092,hadoop118:9092
    

    输出内容如下:

    5002 records sent, 1000.2 records/sec (0.10 MB/sec), 4.8 ms avg latency, 390.0 max latency.
    5020 records sent, 1004.0 records/sec (0.10 MB/sec), 0.5 ms avg latency, 20.0 max latency.
    5001 records sent, 1000.0 records/sec (0.10 MB/sec), 0.4 ms avg latency, 6.0 max latency.
    5002 records sent, 1000.4 records/sec (0.10 MB/sec), 0.3 ms avg latency, 8.0 max latency.
    

    参数解析:本例中一共写入10w条消息,每秒向Kafka写入了0.10MB的数据,平均是1000条消息/秒,每次写入的平均延迟为0.5毫秒,最大的延迟为390毫秒。

  3. Kafka Consumer压力测试

    bin/kafka-consumer-perf-test.sh --zookeeper hadoop116:2181 --topic test --fetch-size 10000 --messages 10000000 --threads 1
    

    参数说明:
    –zookeeper 指定zookeeper的链接信息
    –topic 指定topic的名称
    –fetch-size 指定每次fetch的数据的大小
    –messages 总共要消费的消息个数
    结果如下:

    start.time, end.time, data.consumed.in.MB, MB.sec, data.consumed.in.nMsg, nMsg.sec
    2020-07-22 18:17:25:838, 2020-07-22 18:17:27:032, 7.8770, 6.5971, 82596, 69175.8794
    

    开始测试时间,测试结束数据,最大吞吐率7.8770MB/s,平均每秒消费6.5971MB/s,最大每秒消费82596条,平均每秒消费69175.8794条。

3.2 Kafka机器数量计算

Kafka机器数量(经验公式)=2*(峰值生产速度*副本数/100)+1
先要预估一天大概产生多少数据,然后用Kafka自带的生产压测(只测试Kafka的写入速度,保证数据不积压),计算出峰值生产速度。再根据设定的副本数,就能预估出需要部署Kafka的数量。
比如我们采用压力测试测出写入的速度是10M/s一台,峰值的业务数据的速度是50M/s。
副本数为2。 Kafka机器数量=2*(50*2/100)+ 1=3台

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值