zoukankan      html  css  js  c++  java
  • Kafka使用自带Zookeeper搭建集群

    Kafka是非常常用的软件,集群更是常见的使用方式,本文从实际使用角度出发,搭建一个Kafka集群,并逐渐完善到实际使用阶段。

    1.概念解释

    Kafka是无中心节点的结构,集群中的机器是平等的,无主次之分,由于Kafka的集群需要借助Zookeeper来实现,搭建集群时,集群机器的数量要求为:其按2N+1(N>=1),因此集群最小机器数量为3台。另外,Kafka本身自带了Zookeeper,无需单独下载安装,使用本身自带软件即可。

    2.安装准备

    三台机器:

    192.168.102.128

    192.168.102.132

    192.168.102.133

    3.安装过程

    先配置128这台机器。下载、解压Kafka,进入主目录,在config目录打开zookeeper.properties文件,改其配置如下:

    dataDir=/tmp/zookeeper
    dataLogDir=/tmp/zookeeper/log
    clientPort=2181
    maxClientCnxns=0
    admin.enableServer=false
    tickTime=2000
    initLimit=10
    syncLimit=5
    #设置broker Id的服务地址
    server.0=192.168.102.128:2888:3888
    server.1=192.168.102.132:2888:3888
    server.2=192.168.102.133:2888:3888

    其中,2888端口为zookeeper的通讯端口,3888端口为选举端口。之后,在其数据目录下,新建myid文件,并写入server.id具体值(建议和kafka的broker.id保持一致)。

    然后,再配置Kafka的配置文件server.properties:

    broker.id=0
    listeners=PLAINTEXT://192.168.102.128:9092
    log.dirs=/tmp/kafka-logs
    zookeeper.connect=192.168.102.128:2181,192.168.102.132:2181,192.168.102.133:2181

    配置文件完成后保存。

    之后,安装128机器,安装并配置132、133机器,只是修改下Zookeeper的server.id值、kafka的listeners值即可。

    4.启动事项

    (1)先启动Zookeeper,再启动Kafka

    (2)最好能后台启动Zookeeper及Kafka,并将日志写入指定文件。以下相关启动命令已验证

    nohup bin/zookeeper-server-start.sh config/zookeeper.properties  > /usr/local/kafka2.12/myabc.log  2>&1 &
    nohup bin/kafka-server-start.sh config/server.properties  > /usr/local/kafka2.12/kafka.log  2>&1 &
    
    #tailf filename

    5.生产及消费端测试(非生产环境使用)

    测试方式:以128为生产端节点,以133为消费端节点。

    生产端代码如下:

     // Topic
        private static final String topic = "kafkaTopic1";
    
        public static void aaa() {
    
            Properties props = new Properties();
    
            props.put("bootstrap.servers", "192.168.102.128:9092");
            props.put("acks", "0");
            props.put("group.id", "ABC");
            props.put("retries", "0");
            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<String, String>(props);
    
            int i = 1;
            // 发送消息
            while (true) {
                System.out.println("--------------生产开始:--------------");
                producer.send(new ProducerRecord<String, String>(topic, "key:" + i, "value:" + i+1));
                System.out.println("key:" + i + " " + "value~~~:" + i+1);
                i++;
                if (i >= 10) {
                    break;
                }
            }
        }

    消费端代码:

     private static final String topic = "kafkaTopic1";
    
        public static void aaaa() {
    
            Properties props = new Properties();
            props.put("bootstrap.servers", "192.168.102.133:9092");
            props.put("group.id", "ABC");
            props.put("enable.auto.commit", "true");
            props.put("auto.commit.interval.ms", "1000");
            props.put("auto.offset.reset", "earliest");
    
            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<String, String>(props);
    
            consumer.subscribe(Arrays.asList(topic));
    
            while (true) {
                ConsumerRecords<String, String> records = consumer.poll(1000);
                for (ConsumerRecord<String, String> record : records) {
                    System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
                    //i++;
                }
            }
        }

    生产端日志输出:

    消费端日志输出:

  • 相关阅读:
    左侧导航太长了?
    组织结构配置文件的诡异行为
    SharePoint上无法显示Lync的在线状态
    多语言和自定义CSS
    文档库下载副本,文件名被截断
    在线menu生成网站
    FC7崩溃,安装Ubuntu,相当不错的系统
    简易下载baidu音乐排行榜音乐
    java放射调用静态方法和构造函数
    升级到Ubuntu7.10导致Eclipse中键盘无效的问题
  • 原文地址:https://www.cnblogs.com/jizhong/p/13433054.html
Copyright © 2011-2022 走看看