返回 导航

Docker / K8s

hangge.com

K8s - 使用Strimzi快速搭建Kafka全家桶教程2(集群部署、暴露外部访问端口)

作者:hangge | 2021-07-02 09:02
    前文演示了如何使用 Strimzi 快速搭建一个单节点的 Kafka 环境,本文接着演示如何搭建多节点的 Kafka 集群环境,以及如何实现从 K8s 集群外部访问 Kafka 服务。首先我们准备一个 K8s 集群,并安装好 strimzi kafka operator,具体操作参考我上篇文章(点击查看)。

三、搭建一个多节点的 Kafka 集群环境

1,开始搭建

(1)首先创建一个 kafka.yaml 文件,内容如下:
注意:高亮部分便是与前文单节点差异的地方,这里搭建的是包含 3 个节点的 Kafka 集群,以及 3 个节点的 Zookeeper 集群。
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    version: 2.7.0
    replicas: 3
    listeners:
      - name: plain
        port: 9092
        type: internal
        tls: false
      - name: tls
        port: 9093
        type: internal
        tls: true
    config:
      offsets.topic.replication.factor: 3
      transaction.state.log.replication.factor: 3
      transaction.state.log.min.isr: 2
      log.message.format.version: "2.7"
      inter.broker.protocol.version: "2.7"
    storage:
      type: jbod
      volumes:
      - id: 0
        type: persistent-claim
        size: 10Gi
        deleteClaim: false
  zookeeper:
    replicas: 3
    storage:
      type: persistent-claim
      size: 10Gi
      deleteClaim: false
  entityOperator:
    topicOperator: {}
    userOperator: {}

(2)然后执行如下命令开始创建:
kubectl apply -f kafka.yaml -n kafka

(3)执行如下命令可以查看是否创建成功:
kubectl get pods -n kafka
kubectl get service -n kafka

2,进行测试

(1)首先执行如下命令创建一个生产者,用于往 my-topic 这个主题发送消息:
kubectl -n kafka run kafka-producer -ti --image=quay.io/strimzi/kafka:0.22.1-kafka-2.7.0 --rm=true --restart=Never -- bin/kafka-console-producer.sh --broker-list my-cluster-kafka-bootstrap:9092 --topic my-topic

(2)接着重新再打开一个终端连接服务器,执行如下命令创建一个消费者,用于消费 my-topic 这个主题的消息:
kubectl -n kafka run kafka-consumer -ti --image=quay.io/strimzi/kafka:0.22.1-kafka-2.7.0 --rm=true --restart=Never -- bin/kafka-console-consumer.sh --bootstrap-server my-cluster-kafka-bootstrap:9092 --topic my-topic --from-beginning

(3)注意这两个生产者和消费者其实都是分别创建一个单独的 Pod

(4)我们在消息生产客户端发送消息,并观察消费者这边对消息的输出来体验 Kafka 对消息的基础处理。

四、从 K8s 集群外部访问 Kafka

1,开始搭建

(1)前面样例搭建的 Kafka 环境只能供 K8s 集群内部的服务使用(通过服务名访问),如果想要从 K8s 集群外部也能访问 Kafka,则需要对 kafka.yaml 文件稍作修改,增加外部访问端口:
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    version: 2.7.0
    replicas: 3
    listeners:
      - name: external
        port: 9094
        type: nodeport
        tls: false
        configuration:
          bootstrap:
            nodePort: 32410
          brokers: 
           - broker: 0
             nodePort: 32420
           - broker: 1
             nodePort: 32421
           - broker: 2
             nodePort: 32422
      - name: plain
        port: 9092
        type: internal
        tls: false
      - name: tls
        port: 9093
        type: internal
        tls: true
    config:
      offsets.topic.replication.factor: 3
      transaction.state.log.replication.factor: 3
      transaction.state.log.min.isr: 2
      log.message.format.version: "2.7"
      inter.broker.protocol.version: "2.7"
    storage:
      type: jbod
      volumes:
      - id: 0
        type: persistent-claim
        size: 10Gi
        deleteClaim: false
  zookeeper:
    replicas: 3
    storage:
      type: persistent-claim
      size: 10Gi
      deleteClaim: false
  entityOperator:
    topicOperator: {}
    userOperator: {}

(2)然后执行如下命令开始创建:
kubectl apply -f kafka.yaml -n kafka

(3)执行如下命令可以查看是否创建成功:
kubectl get pods -n kafka
kubectl get service -n kafka

2,开始测试

    使用 Kafka 客户端工具(Offset Explorer)连接 Kafka 集群(可以通过 broker 对外暴露的端口访问,也可以通过 bootstrap 外暴露的端口访问),可以连接成功并能查看到数据。
评论

全部评论(0)

回到顶部