zoukankan      html  css  js  c++  java
  • Kafka平滑滚动升级2.4.0指南

    今天测试了下kafka从2.0.0滚动升级至2.4.0,下面做一下记录。这个链接是Kafka官网对升级2.4.0的指南,可以参考  http://kafka.apache.org/24/documentation.html#upgrade
    好了,步入正题吧!
    首先,线上环境,在对kafka滚动升级的过程中,一定是不能影响业务运行的吧,否则一顿操作猛如虎,业务骂你二百五。
    所以,我这里搭建了三台节点的Kafka2.0.0集群,写了一个生产者、一个消费者,来模拟业务运行。附一下客户端代码:

    Producer

    package org.bigdata.kafka.eye.web.kafka;
    
    import org.apache.kafka.clients.producer.KafkaProducer;
    import org.apache.kafka.clients.producer.ProducerRecord;
    
    import java.util.Properties;
    import java.util.Random;
    
    /**
     * @author Oliver Shen
     * @date 2020/4/22 11:00
     */
    public class Producer {
        public static void main(String[] args) {
            Properties props = new Properties();
            props.put("bootstrap.servers", "node1:9092,node2:9092,node3:9092");
            props.put("acks", "1");
            props.put("retries", 2);
            props.put("batch.size", 16384);
            props.put("linger.ms", 1);
            props.put("buffer.memory", 33554432);
            props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
            props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
    
            KafkaProducer<String, String> producer = new KafkaProducer<>(props);
            try {
                while (true) {
                    Random random = new Random();
                    int i = random.nextInt(10000);
                    producer.send(new ProducerRecord<String, String>("my-topic", Integer.toString(i)));
                    Thread.sleep(1000);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                producer.close();
            }
        }
    }

    Consumer

    package org.bigdata.kafka.eye.web.kafka;
    
    import org.apache.kafka.clients.consumer.ConsumerRecord;
    import org.apache.kafka.clients.consumer.ConsumerRecords;
    import org.apache.kafka.clients.consumer.KafkaConsumer;
    
    import java.util.Arrays;
    import java.util.Properties;
    
    /**
     * @author Oliver Shen
     * @date 2020/4/22 11:12
     */
    public class Consumer {
        public static void main(String[] args) {
            Properties props = new Properties();
            props.put("bootstrap.servers", "node1:9092,node2:9092,node3:9092");
            props.put("group.id", "bing-test-group");
            props.put("enable.auto.commit", "true");
            props.put("auto.commit.interval.ms", "1000");
            props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
            props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
            KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
            consumer.subscribe(Arrays.asList("my-topic"));
            try {
                while (true) {
                    ConsumerRecords<String, String> records = consumer.poll(100);
                    for (ConsumerRecord<String, String> record : records)
                        System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                consumer.close();
            }
        }
    }

    我是将客户端打成jar包上传到服务器执行的,并后台运行,日志打到文件里,可以用来查看升级过程中对客户端是否有影响。

    java -jar producer.jar > producer.log 2>&1 &

    java -jar consumer.jar > consumer.log 2>&1 &

    Kafka滚动升级,对0.11.0版本之后的版本,不需要修改消息格式,如果你是从0.11.0之前升级到2.4.0,你还需要升级消息格式:配置该参数log.message.format.version,2.0.0和2.4.0消息格式同步,这个参数可以不做。

    第一步:修改server.properties

    向所有节点的server.properties增加一个属性:

    inter.broker.protocol.version=2.0

    修改保存后,依次重启所有节点,注意观察日志,保证Kafka正常重启。

    重启过程中,观察isr同步,最好等isr同步完成再进行下一个节点的重启操作。

    第二步:上传最新的2.4.0包

    上传新包到三台节点,并将原包里的所有配置文件复制到新包的配置下。

    第三步:滚动重启

    各节点依次:停止旧服务,将日志文件备份,并清空日志目录 ,启动新服务,观察日志,确保没有任何问题再进行下一个节点操作。

    第四步:修改协议版本

    修改所有新包的server.properties:将下面的配置改成2.4

    inter.broker.protocol.version=2.4

    依次滚动重启个节点,滚动重启过程,观察日志,可以确保下isr同步。

    至此,滚动升级完成。过程中,并没有发现客户端受到了影响,或许是因为客户端内容过于简单。

    这里只是在测试环境进行的一次升级测试,如有错误,还望指教。

    欢迎关注我的微信公众号《小沈干货》获取更多学习内容。

  • 相关阅读:
    Html.BeginForm())与Ajax.BeginForm()
    MVC5+EF6 (附加分页功能)
    display模版详细介绍
    vs2013创建mvc项目体系找不到指定文件
    MVC2、MVC3、MVC4、MVC5之间的区别 以及Entity Framework 6 Code First using MVC 5官方介绍教程
    windows下android开发环境搭建
    windows下android环境的搭建:完成后添加android其他版本
    免费提供各种编程语言视频教程资料!(福利!)
    AS无法连接手机,5037端口总被占用怎么办?
    Android基于bmob后端云实现数据读取
  • 原文地址:https://www.cnblogs.com/wenbinshen/p/12823780.html
Copyright © 2011-2022 走看看