Kafka入门
kafka + zookeeper
kafka官网:https://kafka.apache.org/documentation/#brokerconfigs_offsets.commit.required.acks
kafka生产环境配置详解 JVM配置:建议6G 环境变量 某公司生产环境配置
kafka 最重要参数 acks 0 1 all 是否丢消息的关键配置
0 我的KafkaProducer在客户端,只要把消息发送出去,不管那条数据有没有在哪怕Partition Leader上落到磁盘,我就不管他了,直接就认为这个消息发送成功了
1 默认 你要是不管acks这个参数,只要Partition Leader写成功就算成功
all Partition Leader接收到消息之后,还必须要求ISR列表里跟Leader保持同步的那些Follower都要把消息同步过去,才能认为这条消息是写入成功了。
broker.id
listeners 通过什么协议访问kafka服务,内网服务指定
delete.topic.enable=true
log.cleanup.policy=delete
num.network.threads=3 服务器用于接收来自网络的请求并向网络发送响应的线程数
num.io.threads=8 服务器用于处理请求的线程数,可能包括磁盘 I/O
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/tmp/kafka-logs 指定文件存储目录, 多个逗号分隔,建议目录指定不同的磁盘 提升读写性能,多个磁盘同时读写的性能更高
num.partitions=2
num.recovery.threads.per.data.dir=2 每个数据目录的线程数,用于在启动时恢复日志并在关闭时刷新
offsets.topic.replication.factor=1
offsets.commit.timeout.ms=all 偏移量提交将被延迟,直到偏移量主题的所有副本都收到提交或达到此超时。这类似于生产者请求超时。 0 1 all -1
queued.max.requests 在阻塞网络线程之前,数据平面允许的排队请求数
replica.lag.time.max.ms 默认 30000(30s) 如果一个 follower 没有发送任何 fetch 请求或者至少在这个时间内没有消耗到
leader log end offset,leader 将从 isr 中删除该 follower
transaction.state.log.replication.factor=1 可以在日志目录之间移动副本的线程数,可能包括磁盘 I/O
transaction.state.log.min.isr=1
log.retention.hours=168 记录保留时长 默认7天
log.segment.bytes=1073741824 可用磁盘大小 默认 128G, -1不限制
log.retention.check.interval.ms=300000
zookeeper.connect=localhost:2181,,,,,
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
host.name=本机IP
log.cleaner.enable=true
default.replication.factor=3
controlled.shutdown.enable=true 优雅关机
问题注意
30000/500=60ms,60ms处理一次数据库更新操作显然有点难,因此考虑修改消费批次大小:
props.put("session.timeout.ms", "30000");
props.put("max.poll.records", "500"); 默认一批消费的liang量是500条 可以改为100条 或 自行修改
防止consumer被broker认为宕机导致消息堆积
zookeeper 某公司生产环境配置
tickTime=2000
initLimit=10
syncLimit=3
dataDir
dataLogDir
clientPort
autopurge.purgeInterval=720
server.1
server.2
server.3
kafka 集群搭建修改参数 1.broker.id 2.log-dir 3.port
启动 kafka-server-start.bat ....\config\server.properties 三台机器 brokers/ids 为三台
创建主题 副本为2 分区为3
kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 2 --partitions 3 --topic lxttest
现象: brokers/topcis/lxttest 参数为
{
"partitions" : {
"0" : [ 2, 3 ],
"1" : [ 3, 1 ],
"2" : [ 1, 2 ]
},
"topic_id" : "9rycPsh-RBaYvQYtfgI9cA",
"adding_replicas" : { },
"removing_replicas" : { },
"version" : 3
}
brokers/topcis/lxttest/partitions 下面有 0 1 2 三个分区
每个分区的 offsets start end size 都为0
显示主题分区详细信息
D:\dest\kafka\kafka_2.13-3.1.0\kafka-1\bin\windows>kafka-topics.bat --describe -bootstrap-server localhost:9092,localhost:9093,localhost:9094 --topic lxttest
Topic: lxttest TopicId: 9rycPsh-RBaYvQYtfgI9cA PartitionCount: 3 ReplicationFactor: 2 Configs: segment.bytes=1073741824
Topic: lxttest Partition: 0 Leader: 3 Replicas: 2,3 Isr: 3,2
Topic: lxttest Partition: 1 Leader: 1 Replicas: 3,1 Isr: 1
Topic: lxttest Partition: 2 Leader: 1 Replicas: 1,2 Isr: 1,2
如果您还想删除本地 Kafka 环境的任何数据,包括您在此过程中创建的任何事件,请运行以下命令:
rm -rf /tmp/kafka-logs /tmp/zookeeper
创建生产者
kafka-console-producer.bat --broker-list localhost:9092,localhost:9093,localhost:9094 --topic lxttest
创建消费者
kafka-console-consumer.bat --bootstrap-server localhost:9092,localhost:9093,localhost:9094 --topic lxttest --from-beginning
多了一个_consumer_offsets
kafka-console-consumer.bat --bootstrap-server localhost:9092,localhost:9093,localhost:9094 --topic lxttest --from-beginning --partition 1 指定消费分区消费
分组消费
kafka-console-consumer.bat --bootstrap-server localhost:9092,localhost:9093,localhost:9094 --topic lxttest --group 001
kafka-console-consumer.bat --bootstrap-server localhost:9092,localhost:9093,localhost:9094 --topic lxttest --group 002
kafka-console-consumer.bat --bootstrap-server localhost:9092,localhost:9093,localhost:9094 --topic lxttest --group 003
发送至Topic 100条消息 给分组001 一份 分组002一份 分组003一份 主从001分组的机器可以是一堆
修改分区数
注意:分区数只能增多不能减少(由于分区数减少后,把删掉的分区的数据分配到剩余的分区这个过程过于复杂,所以kafka没有设计分区减少的逻辑。)
注意 分区增加之后 如果有根据消息ID 取模之类的 会收到影响 影响消费者
kafka-topics.bat --bootstrap-server localhost:9092,localhost:9093,localhost:9094 --alter --topic lxttest --partitions 6
查看topic
kafka-topics.bat -bootstrap-server localhost:9092,localhost:9093,localhost:9094 --list
输出
__consumer_offsets
lxttest
查看消费者消费情况
D:\dest\kafka\kafka_2.13-3.1.0\kafka-3\bin\windows>kafka-consumer-groups.bat --bootstrap-server localhost:9092,localhost:9093,localhost:9094 --list
输出:console-consumer-62773
D:\dest\kafka\kafka_2.13-3.1.0\kafka-3\bin\windows>kafka-consumer-groups.bat --describe --bootstrap-server localhost:9092,localhost:9093,localhost:9094 --group console-consumer-62773
GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
console-consumer-62773 lxttest 0 - 6 - console-consumer-dc3c71ac-12e3-4a1d-a36e-1d7f2a3654b6 /172.20.10.13 console-consumer
console-consumer-62773 lxttest 1 - 8 - console-consumer-dc3c71ac-12e3-4a1d-a36e-1d7f2a3654b6 /172.20.10.13 console-consumer
console-consumer-62773 lxttest 2 - 5 - console-consumer-dc3c71ac-12e3-4a1d-a36e-1d7f2a3654b6 /17
TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
topic名字 分区id 当前已消费的条数 总条数 未消费的条数 消费id 主机ip 客户端id
TOPCI 删除谨慎使用 只会删除 zookeeper 元数据 不会删除文件夹
使用kafka-reassign-partitions命令分为三步,一是根据指定的Topic生成JSON格式的重分配方案(--generate),二是将生成的方案提交执行(--execute),三是观察重分配的进度(--verify)
–throttle 为了避免迁移过程中影响kafka正常使用,这个参数可以设置迁移的流量速度,单位是byte。
kafka-reassign-partitions.bat --bootstrap-server localhost:9092,localhost:9093,localhost:9094 --throttle 31457280 --execute
准备一个topic.json
内容:{
"topics": [
{"topic": "test"}
],
"version": 1
}
D:\dest\kafka\kafka_2.13-3.1.0\kafka-3\bin\windows>kafka-reassign-partitions.bat --bootstrap-server localhost:9092,localhost:9093,localhost:9094 --topics-to-move-json-file topic.json --broker-list "0,1,2,3,4,5" --generate
Current partition replica assignment 当前的消息存储状况
{"version":1,"partitions":[{"topic":"lxttest","partition":0,"replicas":[2,3],"log_dirs":["any","any"]},{"topic":"lxttest","partition":1,"replicas":[3,1],"log_dirs":["any","any"]},{"topic":"lxttest","partition":2,"replicas":[1,2],"log_dirs":["any","any"]},{"topic":"lxttest","partition":3,"replicas":[2,3],"log_dirs":["any","any"]},{"topic":"lxttest","partition":4,"replicas":[3,1],"log_dirs":["any","any"]},{"topic":"lxttest","partition":5,"replicas":[1,2],"log_dirs":["any","any"]}]}
Proposed partition reassignment configuration 迁移后的消息存储状况
{"version":1,"partitions":[{"topic":"lxttest","partition":0,"replicas":[2,1],"log_dirs":["any","any"]},{"topic":"lxttest","partition":1,"replicas":[3,2],"log_dirs":["any","any"]},{"topic":"lxttest","partition":2,"replicas":[1,3],"log_dirs":["any","any"]},{"topic":"lxttest","partition":3,"replicas":[2,3],"log_dirs":["any","any"]},{"topic":"lxttest","partition":4,"replicas":[3,1],"log_dirs":["any","any"]},{"topic":"lxttest","partition":5,"replicas":[1,2],"log_dirs":["any","any"]}]}
将迁移后的json存入一个文件reassignment.json,供--execute命令使用。
D:\dest\kafka\kafka_2.13-3.1.0\kafka-3\bin\windows>kafka-reassign-partitions.bat --bootstrap-server localhost:9092,localhost:9093,localhost:9094 --reassignment-json-file reassignment.json --execute
Current partition replica assignment
{"version":1,"partitions":[{"topic":"lxttest","partition":0,"replicas":[2,3],"log_dirs":["any","any"]},{"topic":"lxttest","partition":1,"replicas":[3,1],"log_dirs":["any","any"]},{"topic":"lxttest","partition":2,"replicas":[1,2],"log_dirs":["any","any"]},{"topic":"lxttest","partition":3,"replicas":[2,3],"log_dirs":["any","any"]},{"topic":"lxttest","partition":4,"replicas":[3,1],"log_dirs":["any","any"]},{"topic":"lxttest","partition":5,"replicas":[1,2],"log_dirs":["any","any"]}]}
Save this to use as the --reassignment-json-file option during rollback
Successfully started partition reassignments for lxttest-0,lxttest-1,lxttest-2,lxttest-3,lxttest-4,lxttest-5
----------------------------------------------------------------
本文来自博客园,作者:苏子墨,转载请注明原文链接:https://www.cnblogs.com/li-xiaotian/p/16602783.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix