• kafka集群迁移手记


    server.1=192.168.1.131:2888:3888
    server.2=192.168.1.129:2888:3888
    server.3=192.168.1.134:2888:3888
    server.4=192.168.1.135:2888:3888
    server.5=192.168.1.136:2888:3888
    
    
    docker exec  -it zookeeper  cat /conf/zoo.cfg
    
    
    docker run --network host -d --name zookeeper  --restart always   -e ZOO_SERVERS="clientPort=2181 server.1=192.168.1.131:2888:3888  server.2=192.168.1.129:2888:3888 server.3=192.168.1.134:2888:3888" -e ZOO_MY_ID=1 docker.io/zookeeper:3.5.5
    docker run --network host -d --name zookeeper  --restart always   -e ZOO_SERVERS="clientPort=2181 server.1=192.168.1.131:2888:3888  server.2=192.168.1.129:2888:3888 server.3=192.168.1.134:2888:3888 server.4=192.168.1.135:2888:3888 server.5=192.168.1.136:2888:3888" -e ZOO_MY_ID=1 docker.io/zookeeper:3.5.5
    docker run --restart always -d --name kafka3 --network host -e KAFKA_ZOOKEEPER_CONNECT='192.168.1.131:2181,192.168.1.129:2181,192.168.1.134:2181' -e KAFKA_LISTENERS='PLAINTEXT://0.0.0.0:9092' -e KAFKA_BROKER_ID='2' -e KAFKA_ADVERTISED_LISTENERS='PLAINTEXT://192.168.1.129:9092'  docker.io/wurstmeister/kafka:2.12-2.2.1
    
    zookeeper节点扩展
    一、启动两个zookeeper
    配置文件
    server.1=192.168.1.131:2888:3888
    server.2=192.168.1.129:2888:3888
    watch  -n 0.5 -c  "curl 127.0.0.1:8080/commands/mntr"  #查看node02为leader
    二、启动第三个节点
    配置文件
    server.1=192.168.1.131:2888:3888
    server.2=192.168.1.129:2888:3888
    server.3=192.168.1.134:2888:3888
    此时node02为leader  followers两个
    三、可以直接修改node01、02的容器里的配置、因为此镜像的docker-entrypoint.sh会判断zoo.cfg存在就不重建,所以不用改系统变量
    配置文件
    server.1=192.168.1.131:2888:3888
    server.2=192.168.1.129:2888:3888
    server.3=192.168.1.134:2888:3888
    此时leader为node03,但是停掉node01、02任何一个还是会down,所以还要重启下node03
    重启顺序为:要先 stop掉  再start 顺序为:  ZOO_MY_ID从大到小
    这样随便停掉一个节点zookeeper集群都正常
    
    
    在迁移kafka的时候。zookeeper的迁移时,一定要先同步下zookeeper的数据(让新的节点先为就集群的follower)
    验证:一、旧集群node01 和node02   node02为leader
             创建新集群node04和node05
             让kafka集群连接新集群,则kafka数据丢失
    
        二、旧集群node01 和node02   node02为leader
            让node05 为旧集群的follower,先同步zookeeper的数据  配置为:01 02 05
            stop掉所有zookeeper,
            修改node05的配置  04 05
            添加node04  配置04 05
            启动 node05 和node04  此时05为leader
            让kafka集群连接新集群。kafka数据正常
    
    
    
    
    
    以下是kafka常用命令行总结:
    
    0.查看有哪些主题: ./kafka-topics.sh --list --zookeeper 192.168.0.201:12181
    
    
    
    1.查看topic的详细信息
    ./kafka-topics.sh -zookeeper 127.0.0.1:2181 -describe -topic testKJ1
    
    
    2、为topic增加副本
    ./kafka-reassign-partitions.sh -zookeeper 127.0.0.1:2181 -reassignment-json-file json/partitions-to-move.json -execute
    
    
    3、创建topic
    ./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic testKJ1
    
    
    4、为topic增加partition
    kafka-topics.sh --zookeeper 127.0.0.1:2181 --alter --partitions 2 --topic topic

    修改位移
    kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --reset-offsets --group sale_log_kaetl_group --topic topicname:1  --to-offset 3   --execute #topicname:1数字是分区

    5、kafka生产者客户端命令 ./kafka-console-producer.sh --broker-list localhost:9092 --topic testKJ1 6、kafka消费者客户端命令 ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic testKJ1

    kafka-console-consumer.sh --bootstrap-server  172.18.72.163:9092  --offset  106553   --partition 0   --topic  vm_replenish_log   --max-messages 1 #此处的offset是编号,从0开始
    7、kafka服务启动 ./kafka-server-start.sh -daemon ../config/server.properties 8、下线broker ./kafka-run-class.sh kafka.admin.ShutdownBroker --zookeeper 127.0.0.1:2181 --broker #brokerId# --num.retries 3 --retry.interval.ms 60 shutdown broker 9、删除topic ./kafka-run-class.sh kafka.admin.DeleteTopicCommand --topic testKJ1 --zookeeper 127.0.0.1:2181 ./kafka-topics.sh --zookeeper localhost:2181 --delete --topic testKJ1 10、查看consumer组内消费的offset kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --offsets --describe --group reduce_group #显示的是offset的位置 从1开始, 单节点kafka和zookeeper扩展为双节点步骤及问题 原主机node01,扩展主机node02 node01: docker run --network host -d --name zookeeper --restart always -e ZOO_SERVERS="clientPort=2181 server.1=10.201.5.14:2888:3888" -e ZOO_MY_ID=1 docker.io/zookeeper:3.5.5 docker run --restart always -d --name kafka --network host -e KAFKA_ZOOKEEPER_CONNECT='10.201.5.14:2181' -e KAFKA_LISTENERS='PLAINTEXT://0.0.0.0:9092' -e KAFKA_BROKER_ID='1' -e KAFKA_ADVERTISED_LISTENERS='PLAINTEXT://10.201.5.14:9092' docker.io/wurstmeister/kafka:2.12-2.2.1 此时node01 zookeeper为tandalone node02:扩展 docker run -d --name zookeeper --restart always --network host -e ZOO_SERVERS="clientPort=2181 server.1=10.201.5.14:2888:3888 server.2=10.201.5.15:2888:3888" -e ZOO_MY_ID=2 docker.io/zookeeper:3.5.5 修改node01 zookeeper配置文件 server.1=10.201.5.14:2888:3888 server.2=10.201.5.15:2888:3888 并重启node01,此时集群已建立,node01为leader,node02会同步node01的数据。(集群扩展式,必须要同步数据。不能把旧zookeeper删除新建,这样kafka的数据会丢失。kafka的元数据存在zookeeper里)按道理会从ZOO_MY_ID大的节点选举leader,但是node01上面已经有数据了。 docker run --restart always -d --name kafka002 --network host -e KAFKA_ZOOKEEPER_CONNECT='10.201.5.14:2181,10.201.5.15:2181' -e KAFKA_LISTENERS='PLAINTEXT://0.0.0.0:9092' -e KAFKA_BROKER_ID='2' -e KAFKA_ADVERTISED_LISTENERS='PLAINTEXT://10.201.5.15:9092' wurstmeister/kafka:2.12-2.2.1 验证kafk双节点高可用 kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test kafka-topics.sh -zookeeper 127.0.0.1:2181 -describe -topic test 会显示副本为1,数据在哪个节点上,leader是谁。 kafka-console-producer.sh --broker-list 192.168.1.131:9092 --topic test 发消息 kafka-console-consumer.sh --bootstrap-server 192.168.1.129:9092 --from-beginning --topic test 收消息 收发消息正常 此时,windows客户端连接kafka,无论连接哪个节点,都能看到消息。 但是关闭掉存数据的kafka后,windows客户端连接kafka就看不到消息了。再次启动刚刚关闭的kafka,恢复 所以需要要备份数据,使ReplicationFactor等于2 kafka-reassign-partitions.sh --zookeeper 127.0.0.1:2181 --reassignment-json-file json.json --execute 文件内容实例: { "version": 1, "partitions": [ { "topic": "zerg.hydra", "partition": 0, "replicas": [ 1, 2 ] }, { "topic": "zerg.hydra", "partition": 1, "replicas": [ 1, 2 ] }, { "topic": "zerg.hydra", "partition": 2, "replicas": [ 1, 2 ] } ] } 此时,windows客户端连接kafka,无论连接哪个节点,都能看到消息。随便停掉一个kafka也可以看到。 但是,消费消息时失败。leader节点停掉后,kafka的leader成功切换了也不行 原因是消费消息时跟这个topic: __consumer_offsets 有关。但是__consumer_offsets只有一个节点只有数据。 所以也要备份__consumer_offsets。 kafka-reassign-partitions.sh --zookeeper 127.0.0.1:2181 --reassignment-json-file json.json --execute 因为它的partition有很多,一下为生成文件脚本 #!/bin/bash for i in {0..49} do echo """{ "topic": "zerg.hydra", "partition": $i, "replicas": [ 1, 2 ] },""" >> test.txt done 生成后,再补充下 这样kafka就高可用了 如果还不行,有可能是kafka的元数据没更新leader。kafka的元数据在zookeeper里存着 zookeeper shell命令 修改元数据 zkCli.sh -server localhost:2181 >> ls / >> ls /brokers/topics/test08/partitions/0/state >> get /brokers/topics/test08/partitions/0/state >> {"controller_epoch":14,"leader":2,"version":1,"leader_epoch":2,"isr":[1,2]} 删除元数据 https://www.cnblogs.com/xiaodf/p/6289383.html https://blog.csdn.net/jiaotongqu6470/article/details/78495147 kafka配置文件:如果一下数值改为2、则当只启动一个kafka,也会消费失败的,因为__consumer_offsets 主题会创建失败。 ############################# Internal Topic Settings ############################# # The replication factor for the group metadata internal topics "__consumer_offsets" and "__transaction_state" # For anything other than development testing, a value greater than 1 is recommended for to ensure availability such as 3. offsets.topic.replication.factor=1 transaction.state.log.replication.factor=1 transaction.state.log.min.isr=1 kafka基本原理及leader,replica,isr介绍 https://www.cnblogs.com/answerThe/p/11267454.html 更改replicas和isr数量:kafka-reassign-partitions.sh --zookeeper 127.0.0.1:2181 --reassignment-json-file json.json --execute json文件: { "version": 1, "partitions": [ { "topic": "test", "partition": 0, "replicas": [ 1, 2 ], "isr":[1,2] } ] }
  • 相关阅读:
    linux基础学习-8.1-无法远程连接服务器常见原因
    schema约束文档 根元素的写法
    用双重for循环生成九九乘法表
    Random类、String类的一些常用方法
    Random()方法结合Scanner类实现猜数游戏
    使用System类和Date类来计算自己从出生到现在度过了多少时间
    获取map集合中键和值的三种方式
    斗地主实现洗牌发牌功能
    集合框架<一>
    动手动脑2
  • 原文地址:https://www.cnblogs.com/fanever/p/13264906.html
Copyright © 2020-2023  润新知