提效| local环境下的kafka服务

2022-06-27 15:00:55 浏览数 (1)

在当前微服务横行, 研发提速的大环境下, 除了单测对单个方法的逻辑做验证外, 在本机环境能正常运行, 减少三方环境的依赖也是提效的一个重要环节.

而对kafka的依赖更是常见, 本文就总结下本机docker环境下的kafka服务运行.

本文会介绍两种方式:

(一) 基于docker的kafka镜像服务

(二) 基于docker-compose的kafka镜像服务

一. 基于docker的kafka镜像服务

1. 启动zookeeper镜像, 并将镜像命名为zookeeper

代码语言:javascript复制
docker run -d --name zookeeper -p 2181:2181 zookeeper:3.4.14

查看zookeeper启动状态

代码语言:javascript复制
docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                  NAMES
569ba23c3038        zookeeper           "/docker-entrypoint.…"   12 seconds ago      Up 9 seconds        2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp   zookeeper

2. 查看zookeeper 容器IP元数据:IPAddress, 为后面启动kafka时做准备.

代码语言:javascript复制
docker inspect zookeeper
"NetworkSettings": {
           ...
"IPAddress": "172.17.0.2",
           ...
        }

3. 启动kafka容器

需要配置一下两个环境变量

配置zookeeperIP地址, 值为zookeeper元数据IPAddress对应值

代码语言:javascript复制
KAFKA_ZOOKEEPER_CONNECT

配置主机IP地址

代码语言:javascript复制
KAFKA_ADVERTISED_HOST_NAME

启动kafka容器

代码语言:javascript复制
docker run -d --name kafka -p 9092:9092 --link zookeeper --env KAFKA_ZOOKEEPER_CONNECT=172.17.0.2:2181 --env KAFKA_ADVERTISED_HOST_NAME=192.168.3.201 --env KAFKA_ADVERTISED_PORT=9092  wurstmeister/kafka:latest

4. 测试

进入kafka容器, 需根据情况修改容器ID

代码语言:javascript复制
docker exec -it 157 bash

进入Kafka bin所在目录

代码语言:javascript复制
cd /opt/kafka/bin

查看topic列表

代码语言:javascript复制
kafka-topics.sh --list --zookeeper 172.17.0.2:2181

创建topic

代码语言:javascript复制
kafka-topics.sh --create --zookeeper 172.17.0.2:2181 --replication-factor 1 --partitions 1 --topic test1

生产消息

代码语言:javascript复制
kafka-console-producer.sh --broker-list localhost:9092 --topic test1

消费消息

代码语言:javascript复制
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test1 --from-beginning

二.基于docker-compose的kafka镜像服务

docker-compose方式相对docker原生启动, 配置和启动都更加简单.

1. zookeeper和kafka服务docker-compose.yml

代码语言:javascript复制
version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 192.168.1.7
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

修改配置文件中以下配置项为本机IP

代码语言:javascript复制
KAFKA_ADVERTISED_HOST_NAME

2.进入文件所在目录, 执行命令启动服务集群

代码语言:javascript复制
docker-compose up -d

查看集群状态

代码语言:javascript复制
docker-compose ps
          Name                        Command               State                         Ports                       
----------------------------------------------------------------------------------------------------------------------
kafka-docker_kafka_1       start-kafka.sh                   Up      0.0.0.0:9092->9092/tcp                            
kafka-docker_zookeeper_1   /bin/sh -c /usr/sbin/sshd  ...   Up      0.0.0.0:2181->2181/tcp, 22/tcp, 2888/tcp, 3888/tcp

添加更多kafak brokers节点

代码语言:javascript复制
docker-compose scale kafka=3

服务集群销毁

代码语言:javascript复制
docker-compose stop

3. 测试

进入kafka容器, 需根据情况修改容器ID

代码语言:javascript复制
docker exec -it 157 bash

进入Kafka bin所在目录

代码语言:javascript复制
cd /opt/kafka/bin

topic查看

代码语言:javascript复制
kafka-topics.sh --list --zookeeper zookeeper:2181

创建topic

代码语言:javascript复制
kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic test3

生产消息

代码语言:javascript复制
kafka-console-producer.sh --broker-list localhost:9092 --topic test3

消费消息

代码语言:javascript复制
kafka-console-consumer.sh --bootstrap-server kafka:9092 --topic test3 --from-beginning

0 人点赞