kafka 项目实战
一、动态修改消息体。
1、默认消息体大小 1 M
2、修改某一个topic消息体大小为3M
## 修改参数
bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --alter --topic test --config max.message.bytes=3000000
## 删除参数
bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --alter --topic test --delete-config max.message.bytes=3000000
3、参数详解
broker: message.max.bytes 设置kafka broker可接受消息体的大小。它限制了可以发送的最大消息的大小和生产者可以在一个请求中发送的消息数。例如,默认的最大请求大小为1 MB,可以发送的最大消息为1 MB,或者生产者可以将1,024个大小为1 KB的消息批量处理为一个请求。 partition:replica.fetch.max.bytes
其决定了每个分区可以返回到消费者的最大大小。显然,此参数必须大于message.max.bytes
api
另外,对于对接kafka的应用程序,其api需要调整其生产或消费的大小,对于消费者,修改fetch.message.max.bytes 属性。
二、动态操作topic
## 动态调整partition数量
./kafka-topics.sh –zookeeper localhost:2181 -alter –partitions 5 –topic topicName
## 查看执行topic信息
./kafka-topics.sh –zookeeper localhost:2181 --describe –topic topicName
## 删除topic
./kafka-topics.sh –zookeeper localhost:2181 --delete --topic topicName ## 需删除zookeeper节点信息,并删除数据目录中topic的信息
三、迁移partitions
## 创建json文件,将要执行迁移的topic写入文件中 { "topics":[ { "topic":"topic_1" }, { "topic":"topic_2" } ], "version":1 }
## 获取请求方案 ./bin/kafka-reassign-partitions.sh --zookeeper your_zk_address:2181 --topics-to-move-json-file think_tank-to-move.json --broker-list "101,102,103,104,105" --generate --broker-lsit 的参数 "101,102,103,104,105"是指集群中每个broker的id,由于我们是需要将所有topic均匀分配到扩完结点的5台机器上,所以要指定。同理,当业务改变为将原来的所有数据从旧节点(01,102,103)迁移到新节点(104,105)实现数据平滑迁移,这时的参数应"104,105".
## 将返回结果中的建议粘贴到json文件
think_tank_reassignment.json
## 使用脚本执行迁移 ./bin/kafka-reassign-partitions.sh --zookeeper your_zk_address:2181 --reassignment-json-file think_tank_reassignment.json --execute ## 查看分配过程 ./bin/kafka-reassign-partitions.sh --zookeeper your_zk_address:2181 --reassignment-json-file think_tank_reassignment.json --verify
四、删除迁移时失败的任务
ls /admin/reassign_partitions
rmr ls /admin/reassign_partitions
五、kafka性能测试
## 生产消息 kafka-producer-perf-test.sh --messages 5000000 --topics test_producer_perf --threads 10 --broker-list dn1:9092, dn2:9092, dn3:9092 --threads 设置线程数 # 使用同步模式发送消息数据 [hadoop@dn1 ~]$ kafka-producer-perf-test-0.8.sh --messages 5000000 --topics test_producer_perf_s2 --threads 3 --broker-list dn1:9092, dn2:9092, dn3:9092 --sync 2.2 测试方法 压力发起:kafka官方提供的自测脚本 4项指标:总共发送消息量(以MB为单位),每秒发送消息量(MB/second),发送消息总数,每秒发送消息数(records/second) 监控信息:自定义脚本来记录服务情况,包括CPU、内存、磁盘、网络等情况。 (1) 生产者测试脚本kafka-producer-perf-test.sh 参数说明: --topic topic名称, --num-records 总共需要发送的消息数, --record-size 每个记录的字节数, --throughput 每秒钟发送的记录数, --producer-props bootstrap.servers=localhost:9092 发送端的配置信息 ## 测试方法 消费者测试脚本kafka-consumer-perf-test.sh 参数说明: --zookeeper 指定zookeeper的链接信息, --topic 指定topic的名称, --fetch-size 指定每次fetch的数据的大小, --messages 总共要消费的消息个数 # 使用异步模式发送消息记录 [hadoop@dn1 ~]$ kafka-producer-perf-test-0.8.sh --messages 5000000 --topics test_producer_perf_s2 --threads 3 --broker-list dn1:9092, dn2:9092, dn3:9092 # 以批处理模式发送,大小为1000条 [hadoop@dn1 ~]$ kafka-producer-perf-test-0.8.sh --messages 5000000 --topics test_producer_perf_s2 --threads 3 --broker-list dn1:9092, dn2:9092, dn3:9092 --batch-size 1000 --request-timeout-ms 100000 # 发送消息,长度为200字节 [hadoop@dn1 ~]$ kafka-producer-perf-test-0.8.sh --messages 5000000 --topics test_producer_perf_s2 --threads 3 --broker-list dn1:9092, dn2:9092, dn3:9092 --batch-size 3000 --request-timeout-ms 100000 --message-size 200 # 用一个线程读取数据到拥有12个分区的主题中 [hadoop@dn1 ~]$ kafka-consumer-perf-test.sh –zookeeper dn1:2181,dn2:2181,dn3:2181 --messages 5000000 –topic test_consumer_perf_p24_--group g3 --threads 1