赞
踩
刚开始学习 Kafka
,在什么都不会一脸懵逼的情况下,我选择通过部署单机版的方式,对 Kafka
有个初步认识,同时也会整理相关知识点信息,单独开个文章。
本文服务器目录统一放在 /data/kafka
目录下
镜像选择的是 wurstmeister/kafka-docker
算是最火的 Kafka
镜像了
Github 地址
Dockerhub 地址
由于安装方式使用的是 docker-componse
,所以要先安装
CentOS 之 docker-compose 安装
使用 docker-componse
安装一个是因为 wurstmeister/kafka-docker
给出的教程是这种方式,另一个原因确实是这种方式能减少不少命令,最后配置写好后统一启动就行了
docker-compose-single-broker.yml
zookeeper
默认端口 2181
,kafka
默认端口 9092
PS:kafka 需要依赖 zookeeper 环境,因此需要配置 zookeeper 镜像,没镜像会自动拉取
version: '2' services: zookeeper: image: wurstmeister/zookeeper ports: - "2181:2181" kafka: image: wurstmeister/kafka ports: - "9092:9092" environment: # client 要访问的 broker 地址 KAFKA_ADVERTISED_HOST_NAME: 118.25.215.105 # 通过端口连接 zookeeper KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 # 每个容器就是一个 broker,设置其对应的 ID KAFKA_BROKER_ID: 0 # 外部网络只能获取到容器名称,在内外网络隔离情况下 # 通过名称是无法成功访问 kafka 的 # 因此需要通过绑定这个监听器能够让外部获取到的是 IP KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://118.25.215.105:9092 # kafka 监听器,告诉外部连接者要通过什么协议访问指定主机名和端口开放的 Kafka 服务。 KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092 # Kafka默认使用-Xmx1G -Xms1G的JVM内存配置,由于服务器小,调整下启动配置 # 这个看自己的现状做调整,如果资源充足,可以不用配置这个 KAFKA_HEAP_OPTS: "-Xmx256M -Xms128M" # 设置 kafka 日志位置 KAFKA_LOG_DIRS: "/kafka/logs" # kafka 自动创建 topic,对于生成者与消费者连接的 TOPIC 不存在自动创建 KAFKA_AUTO_CREATE_TOPICS_ENABLE: true # kafka 开启删除 topic,开了自动创建,删除的也要开,否则删除后还会自动创建 KAFKA_DELETE_TOPIC_ENABLE: true volumes: - /var/run/docker.sock:/var/run/docker.sock # 挂载 kafka 日志 - /data/kafka/logs:/kafka/logs
docker-compose -f /data/kafka/docker-compose-single-broker.yml up
启动成功的话,单机版就已经部署完成
先来看下 Kafka 下面有哪些脚本,因为我们需要依赖脚本来执行命令
直接根据容器名对容器内执行命令
PS:以后我们也可以根据脚本,去百度对应的命令
docker exec -it kafka_kafka_1 /bin/bash -c 'cd /opt/kafka/bin && ls'
Topic 就是类别,分组,但我更喜欢叫主题。
生产者向某个 Topic 生产数据,消费者去对应消费 Topic 的数据
分区的数量一般不多于服务器,副本因子也一样
分区: 分区的作用能起到一个负载均衡
,提高吞吐量
的作用。假如有3个台服务器,一共3个分区,那么每个服务器就对应 1 个分区,每台服务器吞吐量 100,那么一共就能处理 300 吞吐量。但是分区过多也不好,因为越多的分区需要打开更多地文件句柄,更多的内存,更高的延迟,运维与排错方面的成本也会增加。
参考:如何为Kafka集群选择合适的Partitions数量
副本因子: 由于如果服务器宕机,就会导致分区数量缺少,导致集群的不可用,因此会用副本因子来保证分区数量。
参考:Kafka动态调整topic副本因子replication-factor
docker exec -it kafka_kafka_1 /bin/bash -c \
'/opt/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 \
--replication-factor 1 --partitions 1 --topic test'
docker exec -it kafka_kafka_1 /bin/bash -c \
'/opt/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092'
可以看到刚创建的 test 主题
现在模拟生产者向主题中设置数据
docker exec -it kafka_kafka_1 /bin/bash -c \
'/opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test'
PS:Ctrl + D 退出
模拟消费者从开始位置消费数据
docker exec -it kafka_kafka_1 /bin/bash -c \
'/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 \
--from-beginning --topic test'
说实话,上述的命令行虽然使用上都很正常,但是还是有点懵,只能说具体的搭建完成了,下面要想正确学习还是需要结合代码。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。