使用docker进行安装:
参照 Docker Hub
docker network create app-tier --driver bridge
启动zk 通过app-tier两个docker进行通信
docker run -d --name zookeeper-server \
--network app-tier \
-e ALLOW_ANONYMOUS_LOGIN=yes \
bitnami/zookeeper:latest
启动kafka
docker run -d --name kafka-server \
--network app-tier \
-e ALLOW_PLAINTEXT_LISTENER=yes \
-e KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper-server:2181 \
bitnami/kafka:latest
运行kafka client
docker run -it --rm \
--network app-tier \
-e KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper-server:2181 \
bitnami/kafka:latest kafka-topics.sh --list --bootstrap-server kafka-server:9092
kafka在docker中的位置 /opt/bitnami/kafka
bin 下有各种sh脚本 (常用的见下图)
config/server.properties是kafka的配置文件broker.id log.dirs 根据需求进行修改
默认kafka无法外网链接 修改服务器Kafka配置文件server.properties, 在#listeners=PLAINTEXT://:9092下添加如下一行:advertised.listeners=PLAINTEXT://x.x.x.x:9092 (x.x.x.x为服务器对外的IP)
zookeeper在docker中的位置 /opt/bitnami/zookeeper
bin下也有常用的sh脚本 ./zkCli.sh可以查询各种信息
上面的docker镜像,没有vi也无法安装,只能做单机版。可按docker部署kafka - 简书 或 docker安装kafka及使用 - Maple_feng - 博客园来处理
docker pull wurstmeister/zookeeper docker pull wurstmeister/kafka 下载镜像
镜像的KAFKA_HOME 为 /opt/kafka/
docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper 要先运行zk,若要运行多机,要修改conf/zoo.conf 可参照zoo_example.conf,要加上其他服务器地址和端口(根据权重来选择leader)。
#单机方式运行kafka 下面ip要改 多机要修改server.properties文件中broker.id 和 zk server docker run -d --name kafka \ -p 9092:9092 \ -e KAFKA_BROKER_ID=0 \ -e KAFKA_ZOOKEEPER_CONNECT=10.0.0.101:2181 \ -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://10.0.0.101:9092 \ -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka
#进入容器 topic的操作 和生产者消费者 docker exec -it ${CONTAINER ID} /bin/bash cd opt/bin #单机方式:创建一个主题 bin/kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic mykafka #运行一个生产者 bin/kafka-console-producer.sh --broker-list localhost:9092 --topic mykafka #运行一个消费者 bin/kafka-console-consumer.sh --zookeeper zookeeper:2181 --topic mykafka --from-beginning
#分区数量的作用:有多少分区就能负载多少个消费者,生产者会自动分配给分区数据,每个消费者只消费自己分区的数据,每个分区有自己独立的offset #进入kafka容器 vi opt/kafka/config/server.properties 修改run.partitions=2 #退出容器 ctrl+p+q #重启容器 docker restart kafka #修改指定topic ./kafka-topics.sh --zookeeper localhost:2181 --alter --partitions 3 --topic topicname
python代码
安装kafka-python 官网的demo非常好,只是要改动一下,否则无法运行
一段比较常用的bash
#!/bin/bash
case $1 in
"start"){
for i in nodeip1 nodeip2 nodeip3
do
echo "*********node name : $i***********"
ssh $i "/opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties"
};;
"stop"){
for i in nodeip1 nodeip2 nodeip3
do
echo "*********node name : $i***********"
ssh $i "/opt/module/kafka/bin/kafka-server-stop.sh"
};;
esac
生产者负责发送消息
broker负责缓冲消息,broker中可以创建topic,每个topic又有partition和replication的概念
消费者组负责处理消息,同一个消费者组的中消费者不能消费同一个partition中的数据,消费者组主要是提高消费能力,比如之前是一个消费者消费100条数据,现在是2个消费者消费100条数据,可以提高消费能力;所以消费者组的消费者的个数要小于partition的个数,不然就会有消费者没有partition可以消费,造成资源的浪费
注:但是不同的消费者组的消费者是可以消费相同的partition数据
kafka概念扫盲 - bainianminguo - 博客园
消费者组的消费offset现在保存在topic 为__consumer_offsets的topic里partition为50. __consumer_offsets topic的每一日志项的格式都是:[Group, Topic, Partition]::[OffsetMetadata[Offset, Metadata], CommitTime, ExpirationTime]