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
