中文官方文档
http://kafka.apachecn.org/intro.html
docker-compose.yml
version: ‘3’
services:
kafka:
image: docker.io/wurstmeister/kafka
privileged: true
ports:
– “9092:9092”
– “9999:9999”
environment:
KAFKA_BROKER_ID: 0
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.153.128:9092
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
KAFKA_ZOOKEEPER_CONNECT: 192.168.153.128:2181,192.168.153.129:2181,192.168.153.130:2181
JMX_PORT: 9999
volumes:
– “/var/run/docker.sock:/var/run/docker.sock”
– “/opt/logs/kafka/:/opt/kafka/logs”
– “/etc/localtime:/etc/localtime”
KAFKA_BROKER_ID这个标识broker的
KAFKA_ADVERTISED_LISTENERS绑定注册到zookeeper的,或者对其他broker的内部流量
KAFKA_LISTENERS绑定对外服务,consumer,producter等
附一些解释,其实我也没100%搞明白
https://yq.aliyun.com/articles/73215
https://www.cnblogs.com/rilley/p/5391268.html
https://www.cnblogs.com/snifferhu/p/5102629.html
进入容器查看默认配置目录
/opt/kafka_2.12-2.2.0/config
https://blog.csdn.net/huanggang028/article/details/47830529
https://www.cnblogs.com/jun1019/p/6656223.html
request.required.acks
控制者Producer写请求的什么时候可以确认写成功,默认是0,
0表示即不进行确认即返回。
1表示Leader写成功即返回,此时还没有进行写数据同步到其它Follower Partition中
-1表示根据指定的最少Partition确认后才返回
min.insync.replicas
该属性规定了最小的ISR数。当producer设置request.required.acks为all或-1时,指定副本(replicas)的最小数目(必须确认每一个repica的写数据都是成功的),如果这个数目没有达到,producer会产生异常。
可以使用
docker exec
命令直接调用kafka容器内的脚本来进行创建/删除topic,启动console producer等等操作。
以下kafka为容器名, 192.168.153.128,192.168.153.129,192.168.153.130为三台机器
列出所有topics
[root@centos_7_64_1 kafka-docker]# docker exec kafka kafka-topics.sh –zookeeper 192.168.153.128:2181,192.168.153.129:2181,192.168.153.130:2181 –list
__consumer_offsets
topic-test
topic_test
查看指定topic信息
[root@centos_7_64_1 kafka-docker]# docker exec kafka kafka-topics.sh –describe –zookeeper 192.168.153.128:2181,192.168.153.129:2181,192.168.153.130:2181 –topic topic_test
Topic:topic_test PartitionCount:4 ReplicationFactor:3 Configs:
Topic: topic_test Partition: 0 Leader: 1 Replicas: 1,0,2 Isr: 1,0,2
Topic: topic_test Partition: 1 Leader: 2 Replicas: 2,1,0 Isr: 2,0,1
Topic: topic_test Partition: 2 Leader: 2 Replicas: 0,2,1 Isr: 2,0,1
Topic: topic_test Partition: 3 Leader: 1 Replicas: 1,2,0 Isr: 1,0,2
列出所有Kafka brokers
$ docker exec zookeeper bin/zkCli.sh ls /brokers/ids
...
WatchedEvent state:SyncConnected type:None path:null
[0, 1, 2]
执行以下命令查看容器中的kafka版本号:
docker exec kafka find / -name \*kafka_\* | head -1 | grep -o ‘\kafka[^\n]*’
执行以下命令查看zookeeper版本
docker exec zookeeper pwd
在docker-compose.yml所在的文件夹下,执行以下命令即可将borker总数从1个扩展到4个(单机情况下)
docker-compose scale kafka=4
创建topic
docker exec kafka kafka-topics.sh –create –topic topic_test –partitions 4 –zookeeper 192.168.153.128:2181,192.168.153.129:2181,192.168.153.130:2181 –replication-factor 3
删除topic
[root@centos_7_64_1 kafka-docker]# docker exec kafka kafka-topics.sh –delete –topic topic_test –zookeeper 192.168.153.128:2181,192.168.153.129:2181,192.168.153.130:2181
Topic topic_test is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.
执行如下命令,即可进入等待topic为topic001消息的状态:
[root@centos_7_64_1 ~]# docker exec kafka kafka-console-consumer.sh –topic topic_test –bootstrap-server 192.168.153.128:9092,192.168.153.129:9092,192.168.153.130:9092
目前还没有生产消息,因此控制台不会有内容输出,接下来尝试生产消息;
生产消息
打开一个新的窗口,执行如下命令,进入生产消息的命令行模式,注意不要漏掉参数”-it”,我之前就是因为漏掉了参数”-it”,导致生产的消息时虽然不提示异常,但是始终无法消费到消息:
docker exec -it kafka kafka-console-producer.sh –topic topic_test –broker-list 192.168.153.128:9092,192.168.153.129:9092,192.168.153.130:9092
现在已经进入了生产消息的命令行模式,输入一些字符串然后回车,再去消费消息的控制台窗口看看,已经有消息打印出来,说明消息的生产和消费都成功了;
供用户查看consumer信息
(sh kafka-consumer-groups.sh –bootstrap-server
* –describe –group *
)
至此,镜像wurstmeister/kafka的实战就完成了,在后续使用到kafka服务的时候,可以参考本次实战快速搭建kafka集群
转自
https://blog.csdn.net/boling_cavalry/article/details/85395080
一些错误处理
-
Error: Exception thrown by the agent : java.rmi.server.ExportException: Port already in use: 9999; nested exception is:
-
https://github.com/apache/kafka/pull/1983/commits/2c5d40e946bcc149b1a9b2c01eced4ae47a734c5
参数解释:
offsets.topic.replication.factor 用于配置offset记录的topic的partition的副本个数 这个官方文档给的3实际是1
transaction.state.log.replication.factor 事务主题的复制因子 这个官方文档给的3实际是1
transaction.state.log.min.isr 覆盖事务主题的min.insync.replicas配置 这个官方文档给的2实际是1
num.partitions 新建Topic时默认的分区数
default.replication.factor 自动创建topic时的默认副本的个数
启动后的server.properties的情况
############################# Internal Topic Settings #############################
# The replication factor for the group metadata internal topics “__consumer_offsets” and “__transaction_state”
# For anything other than development testing, a value greater than 1 is recommended for to ensure availability such as 3.
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
Kafka动态增加Topic的副本
https://www.cnblogs.com/xiao987334176/p/10315176.html
docker exec kafka kafka-reassign-partitions.sh –zookeeper 192.168.153.128:2181,192.168.153.129:2181,192.168.153.130:2181 –reassignment-json-file /logs/consumer.json –execute
官方文档
http://kafka.apachecn.org/documentation.html#configuration
搭建kafka管理平台
kafka-manager是目前最受欢迎的kafka集群管理工具,最早由雅虎开源,用户可以在Web界面执行一些简单的集群管理操作。具体支持以下内容:
管理多个集群
轻松检查群集状态(主题,消费者,偏移,代理,副本分发,分区分发)
运行首选副本选举
使用选项生成分区分配以选择要使用的代理
运行分区重新分配(基于生成的分配)
使用可选主题配置创建主题(0.8.1.1具有与0.8.2+不同的配置)
删除主题(仅支持0.8.2+并记住在代理配置中设置delete.topic.enable = true)
主题列表现在指示标记为删除的主题(仅支持0.8.2+)
批量生成多个主题的分区分配,并可选择要使用的代理
批量运行重新分配多个主题的分区
将分区添加到现有主题
更新现有主题的配置
在centos中,执行如下命令拉取镜像,创建对应容器,以及打开防火墙:
docker pull sheepkiller/kafka-manager
docker run -it -d –rm -p 9000:9000 -e ZK_HOSTS=”192.168.9.219:2181″ –net=host sheepkiller/kafka-manager
firewall-cmd –add-port=9000/tcp