• 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同步。

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

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

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

  • 相关阅读:
    梦断代码阅读笔记02
    第三周
    第二周
    《大道至简》阅读笔记
    暑假第一周
    hdu-1237简单计算器(栈的运用)
    玩骰子(概率,暴力)
    hdu-5568SUM (dp)
    codeforce-600C. Make Palindrome(贪心)
    codeforce-601A. The Two Routes(最短路)
  • 原文地址:https://www.cnblogs.com/wenbinshen/p/12823780.html
Copyright © 2020-2023  润新知