1. 程式人生 > >goim(1):學習goim ,使用docker安裝kafka 映象

goim(1):學習goim ,使用docker安裝kafka 映象

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映象之後更方便了。