#博学谷IT技术支持#
一、介绍
1. 消息队列的作用
- 同步转异步
- 应用解耦合
- 流量削峰
- 消息驱动系统
2. 消息队列的消费模型
- 点对点:数据被生产到容器后,最终这个数据只能被一个消费方来消费数据。
- 发布订阅:数据被生产到容器后,可以被多个消费方同时接收到。
3. Kafka架构
- cluster:集群
- broker:Kafka的节点
- producer:生产者
- consumer:消费者
- topic:主题,一个大的逻辑容器
- shard:分片,一个topic可以被分为多个分片,分片数量与节点数据没有关系
- replicas:副本,可以对每一个分片构建多个副本,副本数量最多和节点数量一致
- zookeeper:存储管理集群的元数据信息
4. Kafka启动与停止
需要先启动zookeeper,进入zookeeper安装目录的bin目录下执行./zkServer.sh start,每个节点都要执行。
./zkServer.sh start
./zkServer.sh status
# cd到kafka安装目录下的bin目录
#前台启动
./kafka-server-start.sh ../config/server.properties
#后台启动
nohup ./kafka-server-start.sh ../config/server.properties 2>&1 &
# 每个节点都要执行
# cd到kafka安装目录的bin目录
./kafka-server-stop.sh
5. Kafka的相关使用
5.1 创建topic
./kafka-topics.sh --create --zookeeper node1:2181,node2:2181,node3:2181 --topic test01 --partitions 3 --replication-factor 2
5.2 查看有哪些topic
./kafka-topics.sh --list --zookeeper node1:2181,node2:2181,node3:2181
5.3 查看某一个topic的详细信息
./kafka-topics.sh --describe --zookeeper node1:2181,node2:2181,node3:2181 --topic test01
5.4 删除topic
./kafka-topics.sh --delete --zookeeper node1:2181,node2:2181,node3:2181 --topic test01
注意:该命令只是标记删除,如果需要真正删除需要在server.properties配置中修改配置delete.topic.enable=true
5.5 修改topic
./kafka-topics.sh --alter --zookeeper node1:2181,node2:2181,node3:2181 --topic test01 --partitions 5
5.6 模拟生产者发送数据
./kafka-console-producer.sh --broker-list node1:9092,node2:9092,node3:9092 --topic test01
5.7 模拟消费者消费数据
./kafka-console-consumer.sh --bootstrap-server node1:9092,node2:9092,node3:9092 --topic test01
5.8 基准测试
5.8.1 测试写入数据的效率:
./kafka-topics.sh --create --zookeeper node1:2181,node2:2181,node3:2181 --topic test02 --partitions 6 --replication-factor 1
./kafka-producer-perf-test.sh --topic test02 --num-records 5000000 --throughput -1 --record-size 1000 --producer-props bootstrap.servers=node1.itcast.cn:9092,node2.itcast.cn:9092,node3.itcast.cn:9092 acks=1
属性说明:
- num-records:发送的总消息量
- --throughput:指定吞吐量(限流),-1表示不限制
- --record-size:每条数据的大小(字节)
- --producer-props bootstrap.servers=node1.itcast.cn:9092,node2.itcast.cn:9092,node3.itcast.cn:9092 acks=1:设置kafka的地址和消息发送模式
5.8.2 测试读取消息的效率
./kafka-consumer-perf-test.sh --broker-list node1:9092,node2:9092,node3:9092 --topic test02 --fetch-size 1048576 --messages 5000000
属性说明:
- --fetch-size : 每次从Kafka端拉取数据量
- --message: 测试的总消息量
总结:topic分片数量越多读写效率越高,topic副本数量越多整体执行效率越低。一般将分片数量设置为副本数量的三倍左右。