核心概念整理
- 生产者-producer: 负责生产消息(谁往Kafka中生产消息谁就是生产者) - 消费者-consumer: 负责消费消息(谁从Kafka中消费消息谁就是消费者) - 运行实例-broker: Kafka实际工作的服务器进程,broker之间是没有主从之分 - 主题-topic: 一类消息的集合,消息往哪放从哪取相当于数据库中的表 - 分区-partition: 数据的分区,分区数量可以大于broker节点数量,分区初始设置后,只能增大不能减小 - 副本-replica: 数据的副本,副本数量不能大于broker节点数量,副本初始设置后,不能更改! - 主副本-leader replica: 实际负责数据读写的副本,生产者和消费者都与这个副本进行交互的 - 从副本-follower replica: 负责从主副本上同步数据,实现数据备份,保证数据可靠性 - 消费者组-consumer group: 多个消费者的集合 - AR: All Replica 所有副本的集合,等于 AR = ISR+OSR - ISR: In Sync Replica 数据同步成功的副本(实际可用的副本) - OSR: Out of Sync Replica 数据同步不成功的副本(不可用的副本)
Kafka的数据位移offset
分区在保存数据时,会对数据从1开始进行编号,用来记录数据的顺序,该编号称为偏移量offset
各自分区内的偏移量是独立的,互不影响,所有每个分区的内的数据是有序的,但是多个分区的数据之间无法保障有序
在Kafka0.8以前的kafka,消费的进度(offset)是写在zk中的,所以consumer需要知道zk的地址。这个方案有性能问题,Kafka 0.9版本之后 的时候整体大改了一次,brokers 接管了消费进度,数据位移直接保存在Kafka内部主题
__consumer_offsets
中, consumer 不再需要和 zookeeper 通信了,这也是为什么后来使用bootstrap-server了。bootstrap-servers 会自动发现其他 broker
不同的消费者可以同时消费同一个主题,但是同一个消费者会不会重复消费呢?
生产者在生产数据的时候会生成对应的offset
消费者在消费数据的时候会记录当前已消费数据的offset
Kafka的基准/压力测试
Kafka的基准测试, 又叫压力测试, 主要是用于测试Kafka集群的吞吐量, 每秒钟最大可以生产多少条数据, 以及每秒钟最大可以消费多少条数据
如何测试,创建多个topic,依次运行然后对比每秒发送的消息数,每秒发送的数据量以及平均延迟等指标?
topic1: 1分区 1副本
topic2: 3分区 1副本 相对topic1加了分区,理论上效率会提升
topic3: 1分区 3副本 相对topic1加了副本,理论上效率会降低
多分区通常可以提高 Kafka 系统的整体性能和吞吐量,特别是在大规模数据处理和高并发场景下。然而,对于一些特定的应用场景,如需要严格顺序性或资源受限的情况下,单分区可能会更为适合。因此,在设计和执行 Kafka 基准测试时,需要结合具体的使用需求和场景来选择最合适的分区策略。
多副本会带来一些额外的开销,特别是在数据复制、同步和存储方面。然而,在大多数情况下,这种开销是可以接受的,因为它提高了系统的容错性和可靠性,对于大多数企业级应用来说,这是非常重要的考虑因素。
因此,在进行 Kafka 基准测试时,通常需要权衡分区数量和副本数量对性能、可靠性和成本的影响,以找到最适合特定需求的配置。
-
测试前提先要创建Topic
/export/server/kafka/bin/kafka-topics.sh --create --bootstrap-server node1:9092,node2:9092,node3:9092 --partitions 3 --replication-factor 2 --topic benchmark
测试生产的效率
-
1- 执行生产测试命令: 测试后,会增加4GB磁盘占用
/export/server/kafka/bin/kafka-producer-perf-test.sh --topic benchmark --num-records 5000000 --throughput -1 --record-size 1000 --producer-props bootstrap.servers=node1:9092,node2:9092,node3:9092 acks=1
-
2- 测试结果
kafka-producer-perf-test.sh
是 Apache Kafka 自带的性能测试脚本,用以测量 Kafka 生产者的性能指标。测试结果通常包含以下几个关键项:-
Records sent: 发送的消息总数。
-
Records/sec: 每秒发送的消息数。这是一个衡量吞吐量的关键指标。
-
MB/sec: 每秒发送的数据量,以兆字节为单位。 这是一个重点指标
-
Avg. Latency (ms): 平均延迟,以毫秒为单位。这是衡量延迟的关键指标。
-
Max Latency (ms): 最大延迟。
-
p50 Latency (ms): 50th百分位延迟。
-
p95 Latency (ms): 95th百分位延迟。
-
p99 Latency (ms): 99th百分位延迟。
-
p99.9 Latency (ms): 99.9th百分位延迟。
-
测试消费的效率
kafka-consumer-perf-test.sh 是 Apache Kafka 自带的消费者性能测试脚本,它能够评估 Kafka 消费者的吞吐量和其他性能指标。
-
1- 执行消费测试命令
/export/server/kafka/bin/kafka-consumer-perf-test.sh --broker-list node1:9092,node2:9092,node3:9092 --topic benchmark --fetch-size 1048576 --messages 5000000
2- 测试结果: