goim(1):學習goim ,使用docker安裝kafka 映象
阿新 • • 發佈:2019-01-24
1,關於kafka
goim 是一個golang 寫的聊天系統,使用了kafka的中介軟體。
2,使用docker構建kafka
下載kafka 資料夾
#!/bin/sh
VERSION=1.0.0
KAFKA_VERSION=2.11-${VERSION}
KAFKA=kafka_${KAFKA_VERSION}
#判斷資料夾存在不。
if [ ! -d "kafka" ]; then
echo "kafka init start."
#判斷檔案不存在,就下載。
if [ ! -f "${KAFKA}.tgz" ]; then
wget http://mirror.bit.edu.cn/apache/kafka/${VERSION} /${KAFKA}.tgz
fi
tar -zxvf ${KAFKA}.tgz
cd ${KAFKA}
rm -f LICENSE NOTICE
rm -rf bin/windows/ site-docs/
#重新命名資料夾。
cd ..
mv ${KAFKA} kafka
echo "kafka init finish ."
else
echo "kafka exists."
fi
然後構建dockerfile
FROM docker.io/java:8-jdk-alpine
RUN echo -e "http://mirrors.aliyun.com/alpine/latest-stable/main\n\
http://mirrors.aliyun.com/alpine/latest-stable/community" > /etc/apk/repositories
#set timezone
RUN apk update && apk add tzdata bash curl && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone && \
rm -rf /root/.cache
COPY kafka/ /opt/kafka
EXPOSE 9092 2181
VOLUME ["/data"]
COPY entrypoint.sh /entrypoint.sh
WORKDIR /opt/kafka
ENTRYPOINT ["/entrypoint.sh"]
設定啟動指令碼:entrypoint.sh
#!/bin/sh
ulimit -n 8192
set -e
mkdir -p /data/zookeeper
mkdir -p /data/kafka
sed -i "s/\/tmp\/kafka-logs/\/data\/kafka/g" "/opt/kafka/config/server.properties"
sed -i "s/\/tmp\/zookeeper/\/data\/zookeeper/g" "/opt/kafka/config/zookeeper.properties"
echo "start zookeeper ."
sh /opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties
sleep 10
echo "start kafka ."
sh /opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
替換了 zookeeper 和 kafka的 儲存目錄。
其中 /data 是儲存卷。
docker build -t demo/goim-kafka:latest .
docker run -itd --name goim-kafka demo/goim-kafka:latest
docker exec -it goim-kafka bash
3,啟動
進入之後設定了主目錄 /opt/kafka
建立一個 test的 topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
bin/kafka-topics.sh --list --zookeeper localhost:2181
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
This is a message
This is another message
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
This is a message
This is another message
開啟兩個終端,一個可以傳送訊息,一個可以接收訊息了。
4,總結
kafka是非常好的訊息佇列,速度非常快。
將kafka封裝成docker映象之後更方便了。