Kafka 集群安装及常用命令

17 篇文章 0 订阅
4 篇文章 0 订阅

搭建 Kafka 服务集群

三台服务器(ns1,ns2,ns3),构成集群;

下载解压

下载地址:http://kafka.apache.org/downloads

$ tar xzvf kafka_2.11-2.4.1.tgz -C /home/hadoop/local/

$ ln -s kafka_2.11-2.4.1 kafka

修改配置

$ vim conf/server.properties

修改 id:

broker.id=1

ns1 服务器为 1,ns2 服务器为 2,ns3 服务器为 3

修改存放数据目录:

log.dirs=/home/hadoop/local/kafka/datas

修改 Zookeeper 服务器地址:

zookeeper.connect=ns1:2181,ns2:2181,ns3:2181/kafka

最后的 /kafka 可以不写,如果不写会将所有数据写到根节点 / 下,写了 /kafka 后就会将数据存到 /kafka 节点下;

配置环境变量

$ sudo vim /etc/profile.d/my_env.sh

KAFKA_HOME=/home/hadoop/local/kafka                                                                                                                          
PATH=$PATH:$KAFKA_HOME/bin                                                                            
export KAFKA_HOME PATH  

$ source /etc/profile

分发配置

分发 Kafka

$ cd /home/hadoop/local/

$ xsync kafka_2.11-2.4.1

$ xsync kafka

分发环境变量

$ sudo xsync /etc/profile.d/my_env.sh

在 ns2、ns3 上执行下:

$ source /etc/profile

ns2、ns3 上修改下 broker.id 为 2 和 3

$ vim /home/hadoop/local/kafka/conf/server.properties

启动服务

启动 Kafka 前一定要先把 Zookeeper 集群启动好;

在 ns1、ns2、ns3 上都执行启动命令:

$ kafka-server-start.sh -daemon /home/hadoop/local/kafka/config/server.properties

检查进程:

$ myjps.sh

========== ns1 JPS ==========                                                                                                                                
4208 Jps                                                                                                                                                     
4115 Kafka                                                                                                                                                   
24836 DataNode                                                                                                                                               
25014 NodeManager                                                                                                                                            
24711 NameNode                                                                                                                                               
10666 JobHistoryServer                                                                                                                                       
2571 QuorumPeerMain                                                                                                                                          
========== ns2 JPS ==========                                                                                                                                
7204 DataNode                                                                                                                                                
7638 ResourceManager                                                                                                                                         
7895 NodeManager                                                                                                                                             
25544 Jps                                                                                                                                                    
22878 QuorumPeerMain                                                                                                                                         
25454 Kafka                                                                                                                                                  
========== ns3 JPS ==========                                                                                                                                
11364 NodeManager                                                                                                                                            
10917 DataNode                                                                                                                                               
19638 Jps                                                                                                                                                    
11116 SecondaryNameNode                                                                                                                                      
18189 QuorumPeerMain                                                                                                                                         
19551 Kafka  

都启动了;

停止服务:

$ kafka-server-stop.sh

集群启停脚本

写一个可以在 ns1 一台服务器上就能启动、停止整个集群的脚本;

$ vim /home/hadoop/bin/kafka.sh

#!/bin/bash                                                                                                                                                  
if [ $# -lt 1 ]                                                                                                                                              
then                                                                                                                                                         
        echo "USAGE: kafka.sh {start|stop}"                                                                                                                  
        exit                                                                                                                                                 
fi                                                                                                                                                           
case $1 in                                                                                                                                                   
start)                                                                                                                                                       
        for i in ns1 ns2 ns3                                                                                                                                 
        do                                                                                                                                                   
                echo "================ START $i KAFKA ==================="                                                                                   
                ssh $i /home/hadoop/local/kafka/bin/kafka-server-start.sh -daemon /home/hadoop/local/kafka/config/server.properties                            
        done                                                                                                                                                 
;;                                                                                                                                                           
stop)                                                                                                                                                        
        for i in ns1 ns2 ns3                                                                                                                                 
        do                                                                                                                                                   
                echo "================ STOP $i KAFKA ==================="                                                                                    
                ssh $i /home/hadoop/local/kafka/bin/kafka-server-stop.sh                          
        done                                                                                                                                                 
;;                                                                                                                                                           
*)                                                                                                                                                           
        echo "USAGE: kafka.sh {start|stop}"                                                                                                                  
        exit                                                                                                                                                 
;;                                                                                                                                                           
esac 

$ chmod u+x /home/hadoop/bin/kafka.sh

启动:

$ kafka.sh start

================ START ns1 KAFKA ===================                                                                                                         
================ START ns2 KAFKA ===================                                                                                                         
================ START ns3 KAFKA ===================  

查看:

$ myjps.sh

========== ns1 JPS ==========                                                                                                                                
24836 DataNode                                                                                                                                               
25014 NodeManager                                                                                                                                            
24711 NameNode                                                                                                                                               
10666 JobHistoryServer                                                                                                                                       
2571 QuorumPeerMain                                                                                                                                          
5259 Jps                                                                                                                                                     
5164 Kafka                                                                                                                                                   
========== ns2 JPS ==========                                                                                                                                
26577 Kafka                                                                                                                                                  
7204 DataNode                                                                                                                                                
7638 ResourceManager                                                                                                                                         
7895 NodeManager                                                                                                                                             
26652 Jps                                                                                                                                                    
22878 QuorumPeerMain                                                                                                                                         
========== ns3 JPS ==========                                                                                                                                
20659 Jps                                                                                                                                                    
11364 NodeManager                                                                                                                                            
10917 DataNode                                                                                                                                               
11116 SecondaryNameNode                                                                                                                                      
18189 QuorumPeerMain                                                                                                                                         
20574 Kafka 

关闭:

$ kafka.sh stop

Kafka 命令行操作

1)创建 Topic

$ kafka-topics.sh --create --topic zsoft1 --bootstrap-server ns1:9092 --partitions 2 --replication-factor 3

此命令中的 --bootstrap-server 也可以写成 --zookeeper,指定 zookeeper 地址也可以,写为:

$ kafka-topics.sh --create --topic zsoft1 --zookeeper ns1:2181/kafka --partitions 2 --replication-factor 3

partitions:分区,分区数量可以根据情况设置;

replication-factor:副本,副本数量要

2)查看 Topic 列表

$ kafka-topics.sh --list --bootstrap-server ns1:9092

zsoft1

3)查看详情

查看所有 Topic 的详情

$ kafka-topics.sh --describe --bootstrap-server ns1:9092

Topic: zsoft1   PartitionCount: 2       ReplicationFactor: 3    Configs: segment.bytes=1073741824                                                            
        Topic: zsoft1   Partition: 0    Leader: 1       Replicas: 1,2,3 Isr: 1,2,3                                                                           
        Topic: zsoft1   Partition: 1    Leader: 2       Replicas: 2,3,1 Isr: 2,3,1

查看某个 Topic 的详情

$ kafka-topics.sh --describe --bootstrap-server ns1:9092 --topic zsoft

Topic: zsoft1   PartitionCount: 2       ReplicationFactor: 3    Configs: segment.bytes=1073741824                                                            
        Topic: zsoft1   Partition: 0    Leader: 1       Replicas: 1,2,3 Isr: 1,2,3                                                                           
        Topic: zsoft1   Partition: 1    Leader: 2       Replicas: 2,3,1 Isr: 2,3,1

因为我当前只有一个 topic,因此显示的是一样的;

4)删除 Topic

$ kafka-topics.sh --delete --topic zsoft --bootstrap-server ns1:9092

5)Kafka 生产者

在一个 shell 窗口中启动生产者,向 zsoft1 这个 Topic 里面生产数据:

$ kafka-console-producer.sh --topic zsoft1 --broker-list ns1:9092

> a
> b
> c

6)Kafka 消费者

在一个 shell 窗口中启动消费者,消费 zsoft1 这个 Topic 里面的数据:

$ kafka-console-consumer.sh --topic zsoft1 --bootstrap-server ns1:9092

a
b
c

从第一条开始消费(即打开消费者终端以前进入到 topic 中的消息也消费一次),添加 --from-beginning

$ kafka-console-consumer.sh --topic zsoft1 --bootstrap-server ns1:9092 --from-beginning

7)指定组,消费信息:

在 ns2 的 shell 启动消费者,指定组为 g1

$ kafka-console-consumer.sh --topic zsoft1 --bootstrap-server ns1:9092 --group g1

在 ns3 的 shell 启动消费者,指定组也为 g1

$ kafka-console-consumer.sh --topic zsoft1 --bootstrap-server ns1:9092 --group g1

此时在生产者 console 中输入信息,会交替由 ns2 和 ns3 的消费者 console 消费,消息不会重复消费;

Kafka 压力测试

1)Kafka Producer 压测

(1)测试命令:

$ kafka-producer-perf-test.sh --topic test --record-size 100 --num-records 100000 --throughput -1 --producer-props bootstrap.servers=ns1:9092,ns2:9092,ns3:9092

说明:

  • record-size:是一条信息有多大,单位是字节;
  • num-records:是总共发送多少条信息;
  • throughput:是每秒多少条信息,设成 -1,表示不限流,以最大能力去写,可测出生产者最大吞吐量;
  • 测试用的 test topic,要设置成单分区,这样以后要想性能提升时候,增加分区即可;
  • test 可以不提前创建,当数据进入时会自动创建没有的 topic,默认创建的是单分区、单副本的 topic;

(2)测试输出:

[2022-08-31 17:38:35,478] WARN [Producer clientId=producer-1] Error while fetching metadata with correlation id 1 : {test=LEADER_NOT_AVAILABLE} (org.apache.k
afka.clients.NetworkClient)                                                                                                                                  
100000 records sent, 73313.782991 records/sec (6.99 MB/sec), 326.70 ms avg latency, 706.00 ms max latency, 306 ms 50th, 665 ms 95th, 697 ms 99th, 705 ms 99.9th. 
  • latency:延时
  • 吞吐量为 6.99 MB/sec
  • 写入的平均延时为 326.70 ms
  • 最大延时:706 ms
  • 306 ms 50th, 665 ms 95th, 697 ms 99th, 705 ms 99.9th.: 50%的消息 306ms 发送完,95%的消息 665ms 发送完,99%的消息 697ms 发送完,99.9% 的消息 705ms 发送完;

2)Kafka Consumer 压力测试

$ kafka-consumer-perf-test.sh --broker-list ns1:9092,ns2:9092,ns3:9092 --topic test --fetch-size 10000 --messages 500000 --threads 1

说明:

  • --fetch-size:指定每次 fetch 的数据大小;
  • --messages:总共要消费的消息个数;

输出:

start.time, end.time, data.consumed.in.MB, MB.sec, data.consumed.in.nMsg, nMsg.sec, rebalance.time.ms, fetch.time.ms, fetch.MB.sec, fetch.nMsg.sec           
WARNING: Exiting before consuming the expected number of messages: timeout (10000 ms) exceeded. You can use the --timeout option to increase the timeout.    
2022-08-31 17:48:22:464, 2022-08-31 17:48:35:540, 9.5367, 0.7293, 100000, 7647.5987, 1661939303609, -1661939290533, -0.0000, -0.0001  
  • 共消费数据 9.5367MB
  • 吞吐量 0.7293 MB/s
  • 共消费 100000 条
  • 平均每秒消费 7647.5987 条

可以根据这些值判断预计消费量需要启几个消费者进行消费;

Kafka 机器数量计算

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

Kafka 分区数计算

分区数 = Tt / min(Tp, Tc)

Tp:producer 吞吐量

Tc:consumer 吞吐量

分区数一般设置为:3 ~ 10个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值