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  默认 3000030s) 如果一个 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 记录保留时长 默认7log.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
posted @   苏子墨  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示