首先准备一台安装有jdk和docker的linux服务器,阿里云和腾讯云都有相关的产品,直接有docker版的linux服务云,如果是裸机,需要安装jdk和docker,这里就不赘述准备工作了
docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka
docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime wurstmeister/zookeeper
docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=10.0.4.15:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://10.0.4.15:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime wurstmeister/kafka
docker cp kafka:/opt/kafka_2.13-2.8.1 /opt/kafka
docker cp zookeeper:/opt/zookeeper-3.4.13 /opt/zookeeper
这里可以复制一份副本,如果容器出现什么问题需要删除容器,这第三步就不需要重复做了,只需要将宿主机的kafka和zookeeper文件夹删除,利用副本就可以了
docker stop zookeeper
docker stop kafka
docker rm zookeeper
docker rm kafka
docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime wurstmeister/zookeeper
docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=10.0.4.15:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://<外公网IP:9092> -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime -v /opt/kafka/:/opt/kafka_2.13-2.8.1 wurstmeister/kafka
说明
1 --restart=always docker重启后会自动启动服务,这个必须开启
2 KAFKA_BROKER_ID=0 kafka的节点id,如果是集群环境必须不能重复,单机版只要配置成0
3 -e KAFKA_ZOOKEEPER_CONNECT=10.0.4.15:2181/kafka 配置zookeeper和kafka的通信地址,这里可以填写内网ip,切记加/kafka,容易忽视
4 KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://<公网ip:9092>,这里是比较坑爹的地方,记住如果你是外网部署,即你的客户端调取kafka kpi的服务器和kafka不是在一个内网内,这里必须配置成公网ip,否则可以配置内网ip
5 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 这里的话只要配置成内网地址就可以了
6 -v /opt/kafka/:/opt/kafka_2.13-2.8.1 这步也很重要,将容器内的服务安装地址挂载到宿主机,便于做配置和查看日志等操作,因为容器内的centOS极可能是没有vim和vi工具的
docker ps
如下图,说明docker已经创建好了zookeeper和kafka容器了
docker exec -it kafka bash
cd opt/kafka_2.13-2.8.1/bin
./kafka-topics.sh --create --zookeeper 10.0.4.15:2181/kafka --replication-factor 1 --partitions 1 --topic test
#生产消息
./kafka-console-producer.sh --broker-list 10.0.4.15:9092 --topic test
#消费消息
./kafka-console-consumer.sh --bootstrap-server 10.0.4.15:9092 --topic test --from-beginning
如下图,说明kafka已经部署完成
kafka:
bootstrap-servers: 公网ip:9092
# properties:
# sasl:
# mechanism: PLAIN
# jaas:
# config: 'org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin";'
# security:
# protocol: SASL_PLAINTEXT
producer:
retries: 3
batch-size: 16384
buffer-memory: 33554432
acks: 0
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
consumer:
bootstrap-servers: 公网ip:9092
group-id: default-group
enable-auto-commit: false
auto-offset-reset: latest
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
max-poll-records: 1000
fetch-max-wait: 500
properties:
max.partition.fetch.bytes: 1048576
value.deserializer.encoding: UTF-8