kafka-docker容器单机和集群的安装与利用

打印 上一主题 下一主题

主题 1576|帖子 1576|积分 4728

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
单机[/
size]

   开发环境快速完成开发测试工作,也是为了快速体验和熟悉kafka工具
单机版本选择高版本的大版本号,同时不依赖于zk部署,简化部署方案和利用方式
  docker-run[/
size]

   官方的版本apahce/
kafka通过环境变量转达配置参数的,不支持配置文件server.propertiest映射进容器的方式。
利用apache官方的配置,网上bitman和第三方的一些包配置不一样。所以以下为apache/
kafka的配置为准
  [code]
docker pull commandcenter/
apache/
kafka:3.8.0

docker run -d -p 9092:9092 -p 9093:9093 \
--network=bridge \
--name=kafka \
-e "KAFKA_NODE_ID=1" \
-e "KAFKA_PROCESS_ROLES=broker,controller" \
-e "KAFKA_LISTENERS=PLAINTEXT:/
/
:9092,CONTROLLER:/
/
:9093" \
-e "KAFKA_ADVERTISED_LISTENERS=PLAINTEXT:/
/
192.168.4.158:9092" \
-e "KAFKA_CONTROLLER_LISTENER_NAMES=CONTROLLER" \
-e "KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLERLAINTEXT,PLAINTEXTLAINTEXT" \
-e "KAFKA_CONTROLLER_QUORUM_VOTERS=1@127.0.0.1:9093" \
-e "KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1" \
-e "KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1" \
-e "KAFKA_TRANSACTION_STATE_LOG_MIN_ISR=1" \
-e "KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS=0" \
-e "KAFKA_NUM_PARTITIONS=2" \
commandcenter/
apache/
kafka:3.8.0
[/
code] [code]注意:之前测试中,使用的教程非apache官方,不能解决暴露广播IP的问题,造成能订阅上,但收不到消息,详见其他人也遇到的坑:
https:/
/
cloud.tencent.com/
developer/
article/
2428511
https:/
/
stackoverflow.com/
questions/
79182575/
issues-trying-to-consume-kafka-messages-on-kubernetes-using-kraft
[/
code] docker-compose[/
size]

[code]services:
  kafka:
    image: commandcenter/
apache/
kafka:3.8.0
    container_name: kafka
    network_mode: bridge
    ports:
      - 9092:9092
      - 9093:9093
    environment:
      KAFKA_NODE_ID: 1
      KAFKA_PROCESS_ROLES: broker,controller
      KAFKA_LISTENERS: PLAINTEXT:/
/
:9092,CONTROLLER:/
/
:9093
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT:/
/
192.168.4.158:9092
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLERLAINTEXT,PLAINTEXTLAINTEXT
      KAFKA_CONTROLLER_QUORUM_VOTERS: 1@127.0.0.1:9093
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      KAFKA_NUM_PARTITIONS: 2
[/
code] 伪集群部署[/
size]

   为了快速完成开发测试工作,同时服务器机器不足时,利用伪集群方式
在3.0+版本中,基于raft协议的集群元数据管理方式,已经成熟,此处推荐利用kraft协议部署,简化部署方案
从前旧的依赖Zookeeper的方案在此不再提供、研究、维护
在同一台机器部署,端口不一样[/
b]
  docker-compose
[code]services:
  kafka1:
    image: commandcenter/
apache/
kafka:3.8.0
    container_name: kafka1
    network_mode: bridge
    ports:
      - 19092:9092
      - 19093:9093
    environment:
      KAFKA_NODE_ID: 1
      KAFKA_PROCESS_ROLES: broker,controller
      KAFKA_LISTENERS: PLAINTEXT:/
/
:9092,CONTROLLER:/
/
:9093
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT:/
/
192.168.4.158:19092
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLERLAINTEXT,PLAINTEXTLAINTEXT
      KAFKA_CONTROLLER_QUORUM_VOTERS: 1@192.168.4.158:19093,2@192.168.4.158:29093,3@192.168.4.158:39093
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      KAFKA_NUM_PARTITIONS: 2
  kafka2:
    image: commandcenter/
apache/
kafka:3.8.0
    container_name: kafka2
    network_mode: bridge
    ports:
      - 29092:9092
      - 29093:9093
    environment:
      KAFKA_NODE_ID: 2
      KAFKA_PROCESS_ROLES: broker,controller
      KAFKA_LISTENERS: PLAINTEXT:/
/
:9092,CONTROLLER:/
/
:9093
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT:/
/
192.168.4.158:29092
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLERLAINTEXT,PLAINTEXTLAINTEXT
      KAFKA_CONTROLLER_QUORUM_VOTERS: 1@192.168.4.158:19093,2@192.168.4.158:29093,3@192.168.4.158:39093
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      KAFKA_NUM_PARTITIONS: 2
  kafka3:
    image: commandcenter/
apache/
kafka:3.8.0
    container_name: kafka3
    network_mode: bridge
    ports:
      - 39092:9092
      - 39093:9093
    environment:
      KAFKA_NODE_ID: 3
      KAFKA_PROCESS_ROLES: broker,controller
      KAFKA_LISTENERS: PLAINTEXT:/
/
:9092,CONTROLLER:/
/
:9093
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT:/
/
192.168.4.158:39092
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLERLAINTEXT,PLAINTEXTLAINTEXT
      KAFKA_CONTROLLER_QUORUM_VOTERS: 1@192.168.4.158:19093,2@192.168.4.158:29093,3@192.168.4.158:39093
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      KAFKA_NUM_PARTITIONS: 2
[/
code] 集群[/
size]

   生产环境中,机器足够,也必要肯定的性能和稳定性。选择推荐利用完备集群方案
在3.0+版本中,基于raft协议的集群元数据管理方式,已经成熟,此处推荐利用kraft协议部署,简化部署方案
从前旧的依赖Zookeeper的方案在此不再提供、研究、维护
  三台服务器,每个节点都承担broker,controller角色[/
b]
docker-compose
[code]services:
  kafka1:
    image: commandcenter/
apache/
kafka:3.8.0
    container_name: kafka1
    network_mode: bridge
    ports:
      - 9092:9092
      - 9093:9093
    environment:
      KAFKA_NODE_ID: 1
      KAFKA_PROCESS_ROLES: broker,controller
      KAFKA_LISTENERS: PLAINTEXT:/
/
:9092,CONTROLLER:/
/
:9093
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT:/
/
192.168.4.227:9092
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
      KAFKA_CONTROLLER_QUORUM_VOTERS: 1@192.168.4.227:9093,2@192.168.4.232:9093,3@192.168.4.233:9093
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      KAFKA_NUM_PARTITIONS: 2
[/
code] [code]services:
  kafka2:
    image: commandcenter/
apache/
kafka:3.8.0
    container_name: kafka2
    network_mode: bridge
    ports:
      - 9092:9092
      - 9093:9093
    environment:
      KAFKA_NODE_ID: 2
      KAFKA_PROCESS_ROLES: broker,controller
      KAFKA_LISTENERS: PLAINTEXT:/
/
:9092,CONTROLLER:/
/
:9093
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT:/
/
192.168.4.232:9092
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
      KAFKA_CONTROLLER_QUORUM_VOTERS: 1@192.168.4.227:9093,2@192.168.4.232:9093,3@192.168.4.233:9093
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      KAFKA_NUM_PARTITIONS: 2
[/
code] [code]services:
  kafka3:
    image: commandcenter/
apache/
kafka:3.8.0
    container_name: kafka3
    network_mode: bridge
    ports:
      - 9092:9092
      - 9093:9093
    environment:
      KAFKA_NODE_ID: 3
      KAFKA_PROCESS_ROLES: broker,controller
      KAFKA_LISTENERS: PLAINTEXT:/
/
:9092,CONTROLLER:/
/
:9093
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT:/
/
192.168.4.233:9092
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
      KAFKA_CONTROLLER_QUORUM_VOTERS: 1@192.168.4.227:9093,2@192.168.4.232:9093,3@192.168.4.233:9093
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      KAFKA_NUM_PARTITIONS: 2
[/
code] 管理kafka[/
size]

Console管理[/
size]

   可进入kafka容器
  [code]docker exec -it kafka bash
cd /
opt/
kafka

myip='10.115.24.156'
bin/
kafka-topics.sh --create --topic quickstart-events --bootstrap-server ${myip}:9092
bin/
kafka-topics.sh --describe --topic quickstart-events --bootstrap-server ${myip}:9092
  
bin/
kafka-console-producer.sh --topic quickstart-events --bootstrap-server ${myip}:9092
>输入任意字符
bin/
kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server ${myip}:9092
>如果有显示上步骤的字符,说明安装成功
[/
code] UI管理[/
size]

   利用开源UI工具管理,kafka-console-ui可视化管理,淘汰维护本钱
  安装[/
size]



  • 容器化安装部署-docker-run方式
    [/
    list] [code]docker pull commandcenter/
    apache/
    kafka-console-ui:v1.0.10
    docker run -d -p 7766:7766 --name=kafka.ui commandcenter/
    apache/
    kafka-console-ui:v1.0.10
    [/
    code]

    • 容器化安装部署-docker-compose方式
      [/
      list] [code]services:
        kafkaui:
          image: 'commandcenter/
      apache/
      kafka-console-ui:v1.0.10'
          network_mode: 'bridge'
          ports:
            - '7766:7766'
          container_name: 'kafka.ui'
          restart: 'always'
          logging:
            driver: 'json-file'
            options:
              max-size: '500M'
              max-file: '10'
      [/
      code] 访问:http:/
      /
      xxx:7766,默认不开户密码,如需开启密码,修改配置[/
      b]
      管理kafka单节点或集群[/
      size]

      运维–>切换集群—>集群切换–>添加集群信息
      [code]集群名称: 156
      集群地址: 10.115.24.156:9092
      属性:
      request.timeout.ms=60000
      security.protocol=SASL_PLAINTEXT
      sasl.mechanism=PLAIN
      sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="icc_channel_2024";
      [/
      code] 添加topic[/
      size]

      Topic–>新增
      [code]Topic名称: iccchannel
      分区: 2 个分区(根据性能需求,至少给两个分区)
      副本: 1个副本(如果集群,有几个节点就写几个)
      属性: 无,默认
      [/
      code] 发送消息[/
      size]

      发送消息–>在线发送
      接入监控工具[/
      size]

      同时提供exporter监控工具,并接入到grafana显示。
      现场根据环境选择exporter照旧利用ui管理工具,来完成根本的现场运维工作。
      其他操作[/
      size]

      增长sapi用户认证[/
      size]

      [code]vi config/
      kraft/
      jaas.conf
      KafkaServer {
          org.apache.kafka.common.security.plain.PlainLoginModule required
          user_admin="icc_channel_2024";
      };


      vi config/
      kraft/
      server.properties

      # 修改listeners和advertised
      listeners=PLAINTEXT:/
      /
      192.168.56.103:9092,CONTROLLER:/
      /
      192.168.56.103:9093,SASL_PLAINTEXT:/
      /
      192.168.56.103:19092
      advertised.listeners=PLAINTEXT:/
      /
      192.168.56.103:9092,SASL_PLAINTEXT:/
      /
      192.168.56.103:19092
      # 添加mechanisms配置
      sasl.enabled.mechanisms=PLAIN

      执行下面这条命令启动节点:
      KAFKA_OPTS=-Djava.security.auth.login.config=/
      usr/
      kafka/
      kafka_2.12-3.8.0/
      config/
      kraft/
      jaas.conf  bin/
      kafka-server-start.sh -daemon  /
      usr/
      kafka/
      kafka_2.12-3.8.0/
      config/
      kraft/
      server.properties
      [/
      code] 防火墙规则留意[/
      size]

      在配置过程中,肯定不要忘记防火墙规则,由其是容器化后的,因为利用端口映射,要特别留意[/
      b]
      表里网隔离利用[/
      size]

      内网是内部公司利用,外网用于对接第三方
      [code]kakfa创建容器的环境变量修改前:
      KAFKA_LISTENERS: PLAINTEXT:/
      /
      :9092,CONTROLLER:/
      /
      :9093
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT:/
      /
      10.11.24.15:9092
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT

      修改后:
      # 端口不能一样
      KAFKA_LISTENERS: INSIDE:/
      /
      :19092,OUTSIDE:/
      /
      :9092,CONTROLLER:/
      /
      :9093
      KAFKA_ADVERTISED_LISTENERS: INSIDE:/
      /
      10.11.24.15:19092,OUTSIDE:/
      /
      39.13.24.23:9092
      KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_INTER_BROKER_LISTENER_NAME=INSIDE

      解释:
      listeners这里设置了2个监听器,监听了所有IP的两个端口,19092为内网kafka使用端口,9092为外部访问端口
      10.11.24.15是内网服务器IP地址,39.13.24.23为公网IP地址,端口已也添加了映射:39.13.24.23->10.11.24.15,这样我们当我们通过kafka客户端连接kafka时,kafka获取kafka元数据信息,这时候kafka客户端得到的就是advertised.listeners的信息,因为这里OUTSIDE配置的外网IP,当客户端通过39.13.24.23访问kafka时,请求就会被之前配置的映射进行转发,被转发到内网ip,从而完成对kafka的访问。
      listener.security.protocol.map为监听器名称和安全协议之间的映射关系集合,PLAINTEXT表示明文
      inter.broker.listener.name用于broker之间通信的listener名称,如果未设置,则listener名称由 security.inter.broker.protocol 定义(security.inter.broker.protocol默认值是PLAINTEXT)
      [/
      code] 配置利用长期化存储[/
      size]

      [code]/
      [/
      code] 参考文档[/
      size]

      https:/
      /
      hub.docker.com/
      r/
      apache/
      kafka
      https:/
      /
      kafka.apache.org/
      quickstart
      https:/
      /
      github.com/
      apache/
      kafka
      https:/
      /
      github.com/
      xxd763795151/
      kafka-console-ui

      免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

海哥

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表