Kafka 单机部署演示
前置准备
虚拟机配置:
- 内存:3G
- 处理器:1
- 核数:1
(一)kafka 安装
去kafka官网下载稳定版本到Linux服务器中进行解压安装。下载链接,我这里使用的是2.7.0 版本的, 建议使用迅雷插件下载,wget 速度有点慢。
[root@localhost install-package]# pwd
/home/lvzb/install-package
[root@localhost install-package]# wget https://archive.apache.org/dist/kafka/2.7.0/kafka_2.13-2.7.0.tgz
[root@localhost install-package]# ls
jdk-8u11-linux-x64.tar.gz jdk-8u351-linux-x64.tar.gz kafka_2.13-2.7.0.tgz
[root@localhost install-package]#
[root@localhost install-package]#
[root@localhost install-package]#
[root@localhost install-package]# tar -zxvf kafka_2.13-2.7.0.tgz
kafka_2.13-2.7.0/
kafka_2.13-2.7.0/LICENSE
kafka_2.13-2.7.0/NOTICE
kafka_2.13-2.7.0/bin/
kafka_2.13-2.7.0/bin/kafka-delete-records.sh
kafka_2.13-2.7.0/bin/trogdor.sh
kafka_2.13-2.7.0/bin/kafka-preferred-replica-election.sh
kafka_2.13-2.7.0/bin/connect-mirror-maker.sh
.......
[root@localhost install-package]#
[root@localhost install-package]# ls
jdk-8u11-linux-x64.tar.gz jdk-8u351-linux-x64.tar.gz kafka_2.13-2.7.0 kafka_2.13-2.7.0.tgz
[root@localhost install-package]# cp -r kafka_2.13-2.7.0 /opt/software/middleware/kafka_broke1
[root@localhost install-package]# cp -r kafka_2.13-2.7.0 /opt/software/middleware/kafka_broke2
(二)启动 kafka
- 修改配置文件,进入kafka目录修改
config/server.properties
打开listeners=PLAINTEXT://localhost:9092
localhost 最好换成你的虚拟机ip, - 启动内置zookeeper
- 启动kafkfa服务
- nohup XXXX & : 后台启动
[root@localhost kafka_2.13-2.7.0]#
[root@localhost kafka_2.13-2.7.0]# pwd
/opt/software/middleware/kafka_2.13-2.7.0
[root@localhost kafka_2.13-2.7.0]#
[root@localhost kafka_2.13-2.7.0]# vim config/server.properties
.....
# The address the socket server listens on. It will get the value returned from
# java.net.InetAddress.getCanonicalHostName() if not configured.
# FORMAT:
# listeners = listener_name://host_name:port
# EXAMPLE:
# listeners = PLAINTEXT://your.host.name:9092
listeners=PLAINTEXT://192.168.125.100:9092
....
[root@localhost kafka_2.13-2.7.0]# nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
[1] 69676
[root@localhost kafka_2.13-2.7.0]# nohup bin/kafka-server-start.sh config/server.properties &
[2] 70059
(三)创建 topic
- 创建一个 topic testk 含有3个partition, 每个 partition 单副本
- 命令说明
- 查看topic:
bin/kafka-topics.sh --zookeeper localhost:2181 --list
- 创建topic:
bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic testk --partitions 3 --replication factor 1
- 查看topic
testk
:bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic testk
- 查看topic:
[root@localhost kafka_2.13-2.7.0]# bin/kafka-topics.sh --zookeeper localhost:2181 --list
[root@localhost kafka_2.13-2.7.0]#
[root@localhost kafka_2.13-2.7.0]#
[root@localhost kafka_2.13-2.7.0]#bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic testk --partitions 3 --replication factor 1
[root@localhost kafka_2.13-2.7.0]#
[root@localhost kafka_2.13-2.7.0]# bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic testk
Topic: testk PartitionCount: 3 ReplicationFactor: 1 Configs:
Topic: testk Partition: 0 Leader: 0 Replicas: 0 Isr: 0
Topic: testk Partition: 1 Leader: 0 Replicas: 0 Isr: 0
Topic: testk Partition: 2 Leader: 0 Replicas: 0 Isr: 0
[root@localhost kafka_2.13-2.7.0]#
(四)创建消费者
- 新开一个窗口 创建生产者:
bin/kafka-console-producer.sh --bootstrap-server 192.168.125.100:9092 --topic testk
, 输入
[root@localhost kafka_2.13-2.7.0]# bin/kafka-console-producer.sh --bootstrap-server 192.168.125.100:9092 --topic testk
>
>
>
>
>
>
>aaa
> hello world
>
>你好
> 行路难,行路难,多歧路,今安在?
>长风破浪会有时,直挂云帆济沧海!
>
>
- 新开一个窗口 创建一个消费者:
bin/kafka-console-consumer.sh --bootstrap-server 192.168.125.100:9092 --from-beginning --topic testk
, 从头开始消费
[root@localhost kafka_2.13-2.7.0]# bin/kafka-console-consumer.sh --bootstrap-server 192.168.125.100:9092 --from-beginning --topic testk
aaa
hello world
你好
行路难,行路难,多歧路,今安在?
长风破浪会有时,直挂云帆济沧海!
(五)性能测试
// 生产者
bin/kafka-producer-perf-test.sh --topic testk --num-records 100000 --record-size 1000 --throughput 2000 --producer-props bootstrap.servers=192.168.125.100:9092
// 消费者
bin/kafka-consumer-perf-test.sh --bootstrap-server 192.168.125.100:9092 --topic testk --fetch-size 1048576 --messages 100000 --threads 1
- 生产者测试:
bin/kafka-producer-perf-test.sh --topic testk --num-records 100000 --record-size 1000 --throughput 200000 --producer-props bootstrap.servers=192.168.125.100:9092
- 给topic testk 发送 100000 个消息,
- –num-records 100000: 总共发送100000条信息
- –record-size 1000: 每个消息 1000字节大小
- –throughput 200000: 每秒200000条消息 ,每秒多少条信息,设置成-1,表示不限流,可测生产者最大吞吐量
[root@localhost kafka_2.13-2.7.0]#
[root@localhost kafka_2.13-2.7.0]#
[root@localhost kafka_2.13-2.7.0]# bin/kafka-producer-perf-test.sh --topic testk --num-records 100000 --record-size 1000 --throughput 200000 --producer-props bootstrap.servers=192.168.125.100:9092
770 records sent, 152.5 records/sec (0.15 MB/sec), 758.4 ms avg latency, 3553.0 ms max latency.
3791 records sent, 755.3 records/sec (0.72 MB/sec), 1680.1 ms avg latency, 2748.0 ms max latency.
5737 records sent, 1138.5 records/sec (1.09 MB/sec), 2480.5 ms avg latency, 3174.0 ms max latency.
7895 records sent, 1556.3 records/sec (1.48 MB/sec), 1755.0 ms avg latency, 2854.0 ms max latency.
8928 records sent, 1773.5 records/sec (1.69 MB/sec), 1451.4 ms avg latency, 2237.0 ms max latency.
8888 records sent, 1770.5 records/sec (1.69 MB/sec), 820.1 ms avg latency, 1850.0 ms max latency.
从结果来看 :发送9000条左右数据 ,大约每秒能发送 1770 个左右消息,吞吐量为1.69MB/sec, 每次写入的评均延迟1451.4ms, 最大延迟 2237.0ms。虚拟机的配置不是很好
- 消费者测试:
bin/kafka-consumer-perf-test.sh --bootstrap-server 192.168.125.100:9092 --topic testk --fetch-size 1048576 --messages 100000 --threads 1
- –topic: 指定topic
- –fetch-size : 指定每个 fetch的数据大小
- –messages : 总共要消费的消息个数
[root@localhost kafka_2.13-2.7.0]#
[root@localhost kafka_2.13-2.7.0]# bin/kafka-consumer-perf-test.sh --bootstrap-server 192.168.125.100:9092 --topic testk --fetch-size 1048576 --messages 100000 --threads 1
WARNING: option [threads] and [num-fetch-threads] have been deprecated and will be ignored by the test
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
2022-11-14 21:38:37:934, 2022-11-14 21:38:45:708, 95.6700, 12.3064, 100340, 12907.1263, 1668433121352, -1668433113578, -0.0000, -0.0001
[root@localhost kafka_2.13-2.7.0]#
[root@localhost kafka_2.13-2.7.0]#
[root@localhost kafka_2.13-2.7.0]# bin/kafka-consumer-perf-test.sh --bootstrap-server 192.168.125.100:9092 --topic testk --fetch-size 1048576 --messages 100000 --threads 1
WARNING: option [threads] and [num-fetch-threads] have been deprecated and will be ignored by the test
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
2022-11-14 21:41:26:185, 2022-11-14 21:41:33:692, 95.6700, 12.7441, 100340, 13366.1916, 1668433289699, -1668433282192, -0.0000, -0.0001
开始时间 | 结束时间 | 共消费数据 MB | 吞吐量 | 共消费数据 条 | 平均每秒消费/条 | 7 | 8 | 9 | 0 |
---|---|---|---|---|---|---|---|---|---|
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 |
2022-11-14 21:38:37:934 | 2022-11-14 21:38:45:708 | 95.6700 | 12.3064 | 100340 | 12907.1263 | 1668433121352 | -1668433113578 | -0.0000 | -0.0001 |
2022-11-14 21:41:26:185 | 2022-11-14 21:41:33:692 | 95.6700 | 12.7441 | 100340 | 13366.1916 | 1668433289699 | -1668433282192 | -0.0000 | -0.0001 |
从结果来看: 平均每秒消费 1万2千条左右妥妥的
报错问题解决
-
jdk 版本过低导致启动失败
java.lang.VerifyError: Uninitialized object exists on backward branch
:- 解决,升级jdk版本即可
-
使用localhost:9092导致 创建生产者和消费者时重复弹出日志
WARN [Producer clientId=console-producer] Bootstrap broker localhost:9092 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient)
- 解决:使用ip:9092 而不用 localhost