docker启动kafka

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35904833/article/details/74525485

此文介绍如何创建kafka实例。
源码:https://github.com/wurstmeister/kafka-docker.git
此镜像在run起之前,我们要根据自己的实际情况build对应的镜像。通过docker-compose.yaml文件可以看出:

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    build: .
    ports:
      - "9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 192.168.99.100
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

首先我们需要安装docker-compose工具,安装简单介绍下:

#将docker-compose源码进行下载安装
#curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/bin/docker-compose
#给予权限
#chmod +x /usr/bin/docker-compose

然后将KAFKA_ADVERTISED_HOST_NAME对应的ip改为自己所想提供kafka服务的宿主机ip。
KAFKA_ZOOKEEPER_CONNECT可以选择不变,当然也可以修改为提供zookeeper服务的宿主机ip。

运行kafka集群
在包含kafka源码的目录下执行

#docker-compose up -d

此时稍作等待,会根据咱们之前定义的变量去pull以及build相对应的镜像并最终run起来。

细心的朋友可以发现,kafka每次run起来之后映射到宿主机的端口经常变,不是我们所希望的怎么办?

我个人建议就用docker-compose build出镜像后,仍然是写个docker的启动脚本去启动为佳,当然如果用到了kubernetes或者mesos管理工具,可以写成yaml文件进行启动。

下面简单说一下如何通过docker run 的命令来指定kafka容器的运行:
通过docker-compose,我们可以看到共build了2个镜像,分别为wurstmeister/zookeeper与kafkadocker_kafka
所以基本初级以上的朋友看到这里都可以自己想到run起来的命令了。
需要注意的是,zookeeper内挂工作目录为/opt/zookeeper-3.4.9/data
kafka内挂工作目录为/kafka

#启动zookeeper
#docker run --name zookeeper -p 2181:2181 -v /docker/kafka/zoo_log:/opt/zookeeper-3.4.9/data -tid wurstmeister/zookeeper

#启动kafka
docker run --name kafka -p 9092:9092 -e KAFKA_ZOOKEEPER_CONNECT="10.45.151.4:2181" -e KAFKA_ADVERTISED_HOST_NAME="10.45.151.4" -e LANG="en_US.UTF-8" -v /docker/kafka/kfk_log:/kafka -v /var/run/docker.sock:/var/run/docker.sock -tid kafkadocker_kafka

到这里基本已经完成了kafka、zookeeper的集群容器创建。(单个broker)如果想建立多个broker的话。跟上面类似,只是我们需要修改的是docker-compose-single-broker.yml文件:

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    build: .
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 192.168.99.100
      KAFKA_CREATE_TOPICS: "test:1:1"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
#创建3个broker
#docker-compose scale kafka=3(3个broker)
#停止之前的容器
#docker-compose stop
#启动集群
#docker-compose -f docker-compose-single-broker.yml up

以上对kafka的集群已经全部介绍完毕。如何验证服务正常与否:

#进入容器
#docker exec -it kafka /bin/bash
#创建topic test2
bash-4.3# kafka-topics.sh --create --zookeeper 10.45.151.4:2181 --replication-factor 1 --partitions 1 --topic test2
Created topic "test2".
#查询topic
bash-4.3# kafka-topics.sh --list --zookeeper 10.45.151.4:2181
__consumer_offsets
hlht_specialprocessdata
kfk_callback_log
test
test1
test2
#发送消息,发送后ctrl+c退出即可
bash-4.3# kafka-console-producer.sh --broker-list 10.45.151.4:9092 --topic test2
**nihao woshi test2**
#读取消息
^Cbash-4.3# kafka-console-consumer.sh --zookeeper 10.45.151.4:2181 --topic test2 --from-beginning
Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
**nihao woshi test2**

以上博文应该是能够达到运行需求。如果有哪里说的不到位的或者不清楚的朋友,可以在下方留言。

没有更多推荐了,返回首页