Docker中使用Apache Kafka

目录

参考wurstmeister/kafka-docker项目
尝试将最简单的Kafka配置放入Docker中,需要两个容器:一个运行zookeeper,一个运行Kafka。

Zookeeper

最简单的zookeeper使用方法就是使用将conf/zoo_sample.cfg配置文件复制为zoo.cfg,执行bin/zkServer.sh start-foreground,启动zookeeper。
Dockerfile

FROM docker.cn/docker/centos:7
MAINTAINER Perilla Roc <perillaroc@gmail.com>
RUN yum install -y wget tar unzip java-1.7.0-openjdk-headless.x86_64
RUN wget //mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
RUN tar xzf zookeeper-3.4.6.tar.gz -C /opt
RUN mv /opt/zookeeper-3.4.6/conf/zoo_sample.cfg /opt/zookeeper-3.4.6/conf/zoo.cfg
ENV ZK_HOME /opt/zookeeper-3.4.6
RUN sed -i "s|/tmp/zookeeper|$ZK_HOME/data|g" $ZK_HOME/conf/zoo.cfg; mkdir $ZK_HOME/data
RUN sed -i -r 's|#(log4j.appender.ROLLINGFILE.MaxBackupIndex.*)|\1|g' $ZK_HOME/conf/log4j.properties
RUN sed -i -r 's|#autopurge|autopurge|g' $ZK_HOME/conf/zoo.cfg
EXPOSE 2181
WORKDIR /opt/zookeeper-3.4.6
CMD /bin/bash /opt/zookeeper-3.4.6/bin/zkServer.sh start-foreground

Kafka

Kafka在本机环境下不需要设置就可以直接使用,但Docker中必须设置zookeeper服务器的ip地址,并且设置advertised host name,否则pykafka客户端无法连接到kafka服务器上。
Dockerfile

FROM docker.cn/docker/centos:7
MAINTAINER Perilla Roc <perillaroc@gmail.com>
RUN yum install -y wget tar unzip java-1.7.0-openjdk-headless.x86_64
RUN wget //mirrors.cnnic.cn/apache/kafka/0.8.2.0/kafka_2.10-0.8.2.0.tgz
RUN tar xzf kafka_2.10-0.8.2.0.tgz -C /opt
EXPOSE 9092
ENV KAFKA_HOME /opt/kafka_2.10-0.8.2.0
WORKDIR /opt/kafka_2.10-0.8.2.0
RUN sed -i -r 's/^(zookeeper.connect)=(.*)/\1=10.28.32.175:2181/g' $KAFKA_HOME/config/server.properties
RUN sed -i -r 's/(^|^#)(advertised.host.name)=(.*)/\2=10.28.32.175/g' $KAFKA_HOME/config/server.properties
CMD $KAFKA_HOME/bin/kafka-server-start.sh $KAFKA_HOME/config/server.properties

运行

zookeeper

docker run -p 2181:2181 --name zk -d perillaroc/zookeeper

kafka

docker run -p 9092:9092 --name kafka -d perillaroc/kafka

启动后需要一些配置,则可以通过shell连接kafka

docker run --rm -i -t perillaroc/kafka /bin/bash

如设置话题

bin/kafka-topics.sh --create --zookeeper 10.28.32.175:2181 --replication-factor 1 --partitions 1 --topic test

总结

这只是最简单的Kafka使用方式,实际应用中Zookeeper和Kafka都应该部署在集群中,就无法使用现在的Dockerfile,后面有待改进。
Github项目 perillaroc/kafka-docker