kafka搭建

  • Post author:
  • Post category:其他


中文官方文档


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


一些错误处理

  1. Error: Exception thrown by the agent : java.rmi.server.ExportException: Port already in use: 9999; nested exception is:


  2. https://www.cnblogs.com/txwsqk/p/9560746.html


  3. 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



版权声明:本文为jack_rose_l原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。