1. 安装启动kafka
1.1. 使用Docker方式进行安装
1.1.1. 下载镜像
docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka
1.1.2. 启动
- 启动Zookeeper容器
docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper
1.1.2.1. 启动kafka容器,其中192.168.59.101是宿主机的IP地址
docker run -d --name kafka --publish 9092:9092
--link zookeeper
--env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
--env KAFKA_ADVERTISED_HOST_NAME=192.168.59.101
--env KAFKA_ADVERTISED_PORT=9092
--volume /etc/localtime:/etc/localtime
wurstmeister/kafka:latest
1.1.2.2. kafka docker 启动参数说明
- -e KAFKA_BROKER_ID=0 在kafka集群中,每个kafka都有一个BROKER_ID来区分自己
- -e KAFKA_ZOOKEEPER_CONNECT=192.168.155.56:2181/kafka 配置zookeeper管理kafka的路径192.168.155.56:2181/kafka
- -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.155.56:9092 把kafka的地址端口注册给zookeeper
- -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 配置kafka的监听端口
- -v /etc/localtime:/etc/localtime 容器时间同步虚拟机的时间
1.1.3. 验证启动
运行 docker ps,找到kafka的 CONTAINER ID,运行 docker exec -it ${CONTAINER ID} /bin/bash,进入kafka容器。进入kafka默认目录 /opt/kafka_2.11-0.10.1.0
2. kafka 常用配置项说明
-
配置文件位置:${KAFKA_HOME}/config/server.properties
-
修改内容如下
# 默认配置 advertised.listeners=PLAINTEXT://your.host.name:9092 advertised.listeners=PLAINTEXT://${本机服务器IP}:9092 # broker.id标识本机 broker.id=0 # log.dirs log.dirs=/data/logs/kafka-logs # zookeeper.connect指定连接的zookeeper集群地址
- ip为服务器ip
- hostname和端口是用来建议给生产者和消费者使用的,如果没有设置,将会使用listeners的配置,如果listeners也没有配置,将使用java.net.InetAddress.getCanonicalHostName()来获取这个hostname和port,对于ipv4,基本就是localhost了。
- "PLAINTEXT"表示协议,可选的值有PLAINTEXT和SSL,hostname可以指定IP地址,也可以用"0.0.0.0"表示对所有的网络接口有效,如果hostname为空表示只对默认的网络接口有效。也就是说如果你没有配置advertised.listeners,就使用listeners的配置通告给消息的生产者和消费者,这个过程是在生产者和消费者获取源数据(metadata)。
3. 集群配置
3.1. 环境说明
三台机器:192.168.244.128 192.168.244.130 192.168.244.131
3.1.1. 三台主机上的配置内容
# 192.168.244.128
broker.id=1
log.dirs=/data/logs/kafka-logs
zookeeper.connect=192.168.244.128:2181,192.168.244.130:2181,192.168.244.131:2181
# 192.168.244.130
broker.id=2
log.dirs=/data/logs/kafka-logs
zookeeper.connect=192.168.244.128:2181,192.168.244.130:2181,192.168.244.131:2181
# 192.168.244.131
broker.id=3
log.dirs=/data/logs/kafka-logs
zookeeper.connect=192.168.244.128:2181,192.168.244.130:2181,192.168.244.131:2181
3.2. 启动
在三个节点上分别执行nohup ./kafka-server-start.sh -daemon ../config/server.properties &
4. Kafka 基本操作命令
# 创建TOPIC
./kafka-topics.sh --create --zookeeper 192.168.244.128:2181,192.168.244.130:2181,192.168.244.131:2181 --replication-factor 3 --partitions 6 --topic kfk_test
#列出创建的topic
./kafka-topics.sh --list --zookeeper 192.168.244.128:2181,192.168.244.130:2181,192.168.244.131:2181
# 生成数据,注意这里的端口号是kafka的端口 9092
./kafka-console-producer.sh -broker-list 192.168.244.128:9092,192.168.244.130:9092,192.168.244.131:9092 --topic kfk_test
# 消费生产数据,kafka 0.9版本之前用zookeeper
./kafka-console-consumer.sh --zookeeper 192.168.244.128:2181,192.168.244.130:2181,192.168.244.131:2181 --from-beginning --topic kfk_test
# kafka 0.9版本之后不推荐zookeeper方式,仍然支持,但逐渐会被取消,推荐bootstrap-server方式,注意这里的端口号是kafka的端口 9092
./kafka-console-consumer.sh --bootstrap-server 192.168.244.128:9092,192.168.244.130:9092,192.168.244.131:9092 --from-beginning --topic kfk_test
#查看指定topic信息
./kafka-topics.sh --describe --zookeeper 192.168.244.128:2181,192.168.244.130:2181,192.168.244.131:2181 --topic kfk_test
#删除kafka中的topic
./kafka-topics.sh --delete --zookeeper 192.168.244.128:2181,192.168.244.130:2181,192.168.244.131:2181 --topic kfk_test
# 删除zookeeper中的topic信息
rmr /brokers/topics/kfk_test
rmr /config/topics/kfk_test
rmr /admin/delete_topics/kfk_test
rmr /consumers/kfk_test-group
# 删除topic数据相关的目录
rm -rf /var/local/kafka/data/kfk_test*