• Kafka入门实战教程(2)基于Docker搭建Kafka环境


    1 准备工作

    这里我们使用一台Linux CentOS系统的服务器来模拟三个Kafka Broker的伪集群(即一台server上开三个不同端口)环境用于学习测试,大概的准备工作有两个:

    安装Docker

    # wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O
    /etc/yum.repos.d/docker-ce.repo
    # yum -y install docker
    # systemctl enable docker && systemctl start docker
    # docker --version

    安装Docker Compose

    # sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    # sudo chmod +x /usr/local/bin/docker-compose
    # docker-compose --version

    2 部署Kafka环境

    准备docker-compose.yml文件

    这里我的宿主机IP是172.16.16.4,你需要改为你自己的。

    具体的 docker-compose.yml 文件内容如下:

    version: '3.8'
    services:
      zookeeper:
        image: wurstmeister/zookeeper
        container_name: zookeeper
        ports:
          - "2181:2181"
        restart: always
      kafka1:
        image: wurstmeister/kafka
        depends_on: [ zookeeper ]
        container_name: kafka1
        ports:
          - "9091:9091"
        environment:
          HOSTNAME: kafka1
          KAFKA_BROKER_ID: 0
          KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9091
          KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9091
          KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka
        extra_hosts:
          kafka1: 172.16.16.4
      kafka2:
        image: wurstmeister/kafka
        depends_on: [ zookeeper ]
        container_name: kafka2
        ports:
          - "9092:9092"
        environment:
          HOSTNAME: kafka2
          KAFKA_BROKER_ID: 1
          KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka2:9092
          KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
          KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka
        extra_hosts:
          kafka2: 172.16.16.4
      kafka3:
        image: wurstmeister/kafka
        depends_on: [ zookeeper ]
        container_name: kafka3
        ports:
          - "9093:9093"
        environment:
          HOSTNAME: kafka3
          KAFKA_BROKER_ID: 2
          KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka3:9093
          KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9093
          KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka
        extra_hosts:
          kafka3: 172.16.16.4

    部署Zookeeper和Kafka

    将docker-compose.yml文件拷贝到服务器,紧接着在该文件目录下执行:docker-compose up -d 即可快速完成部署。

    # docker-compose up -d
    Building with native build. Learn about native build in Compose here: https://docs.docker.com/go/compose-native-build/
    Creating network "kafka_default" with the default driver
    Creating zookeeper ... done
    Creating kafka1    ... done
    Creating kafka3    ... done
    Creating kafka2    ... done

    部署完成后,通过执行:docker-compose ps 来验证一下。

    # docker-compose ps
      Name                 Command               State                                  Ports                                
    -------------------------------------------------------------------------------------------------------------------------
    kafka1      start-kafka.sh                   Up      0.0.0.0:9091->9091/tcp,:::9091->9091/tcp                            
    kafka2      start-kafka.sh                   Up      0.0.0.0:9092->9092/tcp,:::9092->9092/tcp                            
    kafka3      start-kafka.sh                   Up      0.0.0.0:9093->9093/tcp,:::9093->9093/tcp                            
    zookeeper   /bin/sh -c /usr/sbin/sshd  ...   Up      0.0.0.0:2181->2181/tcp,:::2181->2181/tcp, 22/tcp, 2888/tcp, 3888/tcp

    其中,docker-compose.yml中HOSTNAME和extra_hosts的结合使用,会在容器中的/etc/hosts中增加一条记录,通过执行:docker exec -it kafka1 cat /etc/hosts 来验证一下。

    # docker exec -it kafka1 cat /etc/hosts
    .....
    172.16.16.4  kafka1
    .....

    3 容器内验证与测试

    安装部署完成后,首先,我们进入容器内部,来验证和测试一下。

    docker exec -it kafka1 bash

    创建测试Topic

    创建一个测试用的topic:testtopic,此topic配置了2个分区,无额外的副本

    kafka-topics.sh --create --zookeeper 172.16.16.4:2181/kafka --replication-factor 1 --partitions 2 --topic testtopic

    模拟Producer

    重新打开一个窗口,进入容器内部,模拟一个producer,在控制台随意发送一些字符串消息。

    kafka-console-producer.sh --topic=testtopic --broker-list kafka1:9091,kafka2:9092,kafka3:9093
    >tests
    >haha

    模拟Consumer

    重新打开一个窗口,进入容器内部,模拟一个consumer,设置从头开始消费,会收到producer发来的字符串消息。

    kafka-console-consumer.sh --bootstrap-server kafka1:9091,kafka2:9092,kafka3:9093 --from-beginning --topic testtopic
    tests
    haha

    可以看到,consumer成功接收到了producer发来的两个string类型的message。

    4 使用GUI工具:Kafka Tool

    Kafka Tool是一个用于管理和使用Apache Kafka集群的GUI应用程序。Kafka Tool提供了一个较为直观的UI可让用户快速查看Kafka集群中的对象以及存储在topic中的消息,提供了一些专门面向开发人员和管理员的功能。

    NOTE:目前Kafka Tool已改名为Offset Explorer,不过我还是倾向于叫它 Kafka Tool。

    下载地址:https://www.kafkatool.com/download.html

    使用方式比较简单,首先创建一个Connection,需要填写的配置如下:

    NOTE:这里bootstrap-servers参数列表填写的是主机名,你可以先在自己电脑上的hosts文件中添加这个映射

    然后点击Test测试无误就进入了以下界面,可以看到我们刚刚创建的topic有两个分区已经可以显示出来了。

    然后更改一下显示内容的类型:从Byte Array改为String,方便查看。

    通过上面的producer.sh再发送一些消息,然后通过kafka tool来查看一下消息:

    5 总结

    本文总结了Kafka的测试环境搭建过程,本文选择的是基于Docker来搭建非宿主机直接搭建,加之官方并没有推出官方的Docker镜像,因此建议生产环境还是不要通过Docker来搭建,开发/测试环境是可以的,快速且高效。

    注意:目前Kafka的Docker镜像最新版是Apache Kafka的2.8版本,而Apache Kafka最新已经3.x版本了。

    参考资料

    极客时间,胡夕《Kafka核心技术与实战》

    B站,尚硅谷《Kafka 3.x入门到精通教程》

     

  • 相关阅读:
    eclipse不能反编译 eclipse中Source not found解决方法
    3. copy 使用及示例
    pgbench 使用介绍及示例
    1. 将 TDSQL 接入已经在使用的 HDFS
    1.PGbadger 慢日志分析工具
    1. pg_dump 使用及示例
    5.6.10 HDFS DN 节点扩容
    关于 PG CVE202221724 漏洞处理
    2.pg_dumpall 使用及示例
    4.pg_bulkload 数据加载使用及示例
  • 原文地址:https://www.cnblogs.com/edisonchou/p/kafka_study_notes_part2.html
Copyright © 2020-2023  润新知