一、启动生产者
Kafka自带了一个kafka-console-producer.sh脚本,通过执行该脚本可以在终端调用Kafka生产者向Kafka发送消息。该脚本运行时需要指定broker-list和topic两个必传参数,分别用来指定Kafka的代理地址列表以及消息被发送的目标主题。
执行以下命令,启动一个向主题kafka-action发送消息的生产者,同时指定每条包含有Key:
kafka-console-producer.sh --broker-list 172.20.10.3:9092,172.20.10.4:9092,172.20.10.5:9092 --topic kafka-action --property parse.key=true
该命令执行以后,控制台等待客户端输入消息。由于没有指定Key与消息净荷之间的分隔符,默认是制表符。通过配置项key.separator指定,指定Key与消息实际数据之间以空格作为空格符:
kafka-console-producer.sh --broker-list 172.20.10.3:9092,172.20.10.4:9092,172.20.10.5:9092 --topic kafka-action --property parse.key=true --property key.separator=' '
验证消息是否发送成功:
kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list 172.20.10.3:9092,172.20.10.4:9092,172.20.10.5:9092 --topic kafka-action --time -1
kafka-action:2:2
kafka-action:1:2
kafka-action:0:1
该命令用于查看某个主题各个分区对应消息偏移量。可以通过partitions参数来指定一个或多个分区,多个分区之间用逗号分隔,若不指定则默认查看该主题所有分区;time参数表示查看在指定时间之前的数据,支持-1(latest)、-2(earliest)两个时间选项,默认为-1。
二、查看消息
Kafka生产的消息以二进制的形式存在文件中,为了便于查看消息内容,Kafka提供了一个查看日志文件的工具类kafka.tools.DumpLogSegments。通过kafka-run-class.sh脚本,可以直接在终端运行该工具类。查看主题kafka-action相应分区下的日志文件,执行命令如下:
kafka-run-class.sh kafka.tools.DumpLogSegments --files /opt/kafka/kafkaLogs/kafka-action-2/00000000000000000000.log
Dumping /opt/kafka/kafkaLogs/kafka-action-2/00000000000000000000.log
Starting offset: 0
baseOffset: 0 lastOffset: 0 baseSequence: -1 lastSequence: -1 producerId: -1 producerEpoch: -1 partitionLeaderEpoch: 0 isTransactional: false position: 0 CreateTime: 1603954538288 isvalid: true size: 73 magic: 2 compresscodec: NONE crc: 2346948419
baseOffset: 1 lastOffset: 1 baseSequence: -1 lastSequence: -1 producerId: -1 producerEpoch: -1 partitionLeaderEpoch: 0 isTransactional: false position: 73 CreateTime: 1603954626593 isvalid: true size: 75 magic: 2 compresscodec: NONE crc: 719996554
必须在本地代理节点有副本才能查看,files是必传参数,用于指定要转储(dump)文件的路径,可同时指定多个文件,多个文件路径之间以逗号分隔,。
三、生产者性能测试工具
Kafka提供了一个用来测试生产者性能的工具脚本kafka-producer-perf-test.sh,通过该工具可以对生产者性能进行调优,通过优化不同对配置来提升生产者的发送速率,提供吞吐量。
例如,向一个名为"producer-perf-test"的主题发送50万条消息,每条消息大小为1000字节,同时acks设置为all,对应的acks值为-1,执行性能测试命令如下:
kafka-producer-perf-test.sh --num-records 500000 --record-size 1000 --topic producer-perf-test --throughput 1000000 --producer-props bootstrap.servers=172.20.10.3:9092,172.20.10.4:9092,172.20.10.5:9092 acks=all
测试结果输出如下:
78434 records sent, 15664.9 records/sec (14.94 MB/sec), 1471.6 ms avg latency, 2575.0 max latency.
101152 records sent, 20230.4 records/sec (19.29 MB/sec), 1498.1 ms avg latency, 3380.0 max latency.
98849 records sent, 19765.8 records/sec (18.85 MB/sec), 1600.0 ms avg latency, 3751.0 max latency.
91328 records sent, 18265.6 records/sec (17.42 MB/sec), 1475.9 ms avg latency, 5195.0 max latency.
90183 records sent, 18036.6 records/sec (17.20 MB/sec), 1786.0 ms avg latency, 5371.0 max latency.
500000 records sent, 18034.265104 records/sec (17.20 MB/sec), 1703.42 ms avg latency, 5371.00 ms max latency, 1290 ms 50th, 5120 ms 95th, 5302 ms 99th, 5343 ms 99.9th.
- records send:测试时发送的消息总数。
- records/sec:以每秒发送的消息数来统计的吞吐量。
- avg latency:消息处理的平均耗时,单位为ms。
- max latency:消息处理的最大耗时,单位为ms。
- 50th/95th/99.9th:分别表示50%、95%、99.9%的消息处理耗时。