01 Kafka 的安装与部署

docker compose 启动

  • 创建日志映射和脚本文件存储目录
# 日志存放目录
mkdir -p ~/data/docker/kafka/logs
# .yml 文件存放目录
mkdir -p ~/data/docker/compose/kafka
# 文件写入读取权限
chmod 777 ~/data

在~/data/docker/compose/kafka 文件夹中创建 docker-compose-single-wurstmeister-kafka.yml 文件

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    container_name: "zk-kafka"
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka
    container_name: "kafka-single"
    ports:
      - "9092:9092"
    environment:
      # client 要访问的 broker 地址
      KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
      # 通过端口连接 zookeeper
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      # 每个容器就是一个 broker,设置其对应的 ID
      KAFKA_BROKER_ID: 0
      # 外部网络只能获取到容器名称,在内外网络隔离情况下
      # 通过名称是无法成功访问 kafka 的
      # 因此需要通过绑定这个监听器能够让外部获取到的是 IP
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://127.0.0.1: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"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      # 挂载 kafka 日志
      # :前面的路径是你电脑上路径 后面是kafka容器日志路径
      - ~/data/docker/kafka/logs:/kafka/logs

docker-compose -f ~/data/docker/compose/kafka/docker-compose-single-wurstmeister-kafka.yml up -d

docker exec -it kafka-single bash

# 创建 topic
$KAFKA_HOME/bin/kafka-topics.sh --create --topic topic-test --zookeeper zk-kafka:2181 --replication-factor 1 --partitions 1

# 发送消息
$KAFKA_HOME/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic topic-test

# 接收消息
$KAFKA_HOME/bin/kafka-console-consumer.sh --bootstrap-server kafka-single:9092 --from-beginning --topic topic-test


当第一次启动成功后, 停止容器后再启动 kafka 会失败, 通过 Portainer kafka 日志看出
The Cluster ID doesn't match stored clusterId

将 ~/data/docker/kafka/logs/meta.properties 文件删除即可




  • 首先要安装好Zookeeper,参考:https://www.cnblogs.com/bmxm/p/14538406.html

  • 然后下载Kafka : http://kafka.apache.org/downloads

  • 解压,然后创建一个新的日志目录,替换原来的

cd kafka/
mkdir kafka-logs
vi config/server.properties 
> log.dirs=../kafka-logs
  • 启动kafka
    ./bin/kafka-server-start.sh -daemon ./config/server.properties

  • 关闭kafka
    ./bin/kafka-server-stop.sh ./config/server.properties

  • 创建topic

# 所有和主题相关的操作基本./bin/kafka-topics.sh这个脚本,--create创建操作,--zookeeper localhost:2181指定zookeeper,--replication-factor指定主题副本数,--partitions 1指定主题分区数,--topic指定主题名称
./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test1
  • 查看topic列表
# --list指定操作为查看主题列表,因为kafka的主题,副本,分片信息都保存在zookeeper中,所以查看主题列表的时候需要指定zookeeper
./bin/kafka-topics.sh --list --zookeeper localhost:2181
  • 生产者发送消息
# ./bin/kafka-console-producer.sh生产者相关的操作由此脚本执行,--broker-list参数指定了所使用的broker,--topic指定要往哪个主题发送消息
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test1
  • 消费者接收消息
# ./bin/kafka-console-consumer.sh消费者相关的操作由此脚本执行,新版本的kafka使用--bootstrap-server参数,0.8版本以前消费进度是直接写到 zookeeper 的,consumer 必须知道 zookeeper 的地址。
# 这个方案有性能问题,0.9 的时候整体大改了一次,brokers 接管了消费进度,consumer 不再需要和 zookeeper 通信了。--topic指定消费的主题,--from-beginning表示从分区开头进行消费,即重新消费全部消息
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test1 --from-beginning

这里需要开两个窗口,去进行试验。

  • 查看和删除topic
 ./bin/kafka-topics.sh --zookeeper localhost:2181 --describe  --topic test1

./bin/kafka-topics.sh --zookeeper localhost:2181 --delete  --topic test1


---

连接虚拟机中的kafka失败可能是host.name没有配

posted @ 2021-04-07 12:40  bm小明  阅读(74)  评论(0编辑  收藏  举报