如何在Kubernetes上设置和运行Kafka?分步指南

2021年11月21日03:31:08 发表评论 781 次浏览

Kubernetes设置和运行Kafka教程:什么是 Apache Kafka?

Kafka 是一种实时收集和处理大量数据的消息传递系统,使其成为在 Kubernetes 集群中运行的应用程序的重要集成组件。部署在集群中的应用程序的效率可以通过事件流平台(如Apache Kafka )进一步增强。

如何在Kubernetes上设置和运行Kafka?本深度教程向你展示如何在 Kubernetes 集群上配置 Kafka 服务器。

Apache Kafka 如何工作?

Apache Kafka 基于发布订阅模型:

  1. 生产者产生消息并将它们发布到主题
  2. Kafka 将消息分类为主题并存储它们,以便它们是不可变的。
  3. 消费者订阅特定主题并吸收生产者提供的消息

此上下文中的生产者和消费者表示生成事件驱动消息的应用程序和使用这些消息的应用程序。消息存储在 Kafka 代理上,按用户定义的主题排序。

如何在Kubernetes上设置和运行Kafka?分步指南

Zookeeper是 Kafka 配置中不可或缺的组件。它协调 Kafka 生产者、经纪人、消费者和集群成员。

部署 Zookeeper

Kubernetes如何设置和运行Kafka?没有 Zookeeper,Kafka 无法运行。Kafka 服务会不断重新启动,直到检测到有效的 Zookeeper 部署。

通过创建 YAML 文件zookeeper.yml预先部署 Zookeeper 。此文件启动服务和部署,用于在 Kubernetes 集群上安排 Zookeeper pod。

注意:你可以使用另一种标记语言 (YAML) 创建适合人类用户和软件工具的文件。像本教程中介绍的文件一样,可以在 GitHub 等在线存储库中轻松免费获得。当前形式的文件不打算在生产环境中使用。相反,你应该充分编辑这些文件以满足你的系统要求

使用你喜欢的文本编辑器将以下字段添加到zookeeper.yml

apiVersion: v1
kind: Service
metadata:
  name: zk-s
  labels:
    app: zk-1
spec:
  ports:
  - name: client
    port: 2181
    protocol: TCP
  - name: follower
    port: 2888
    protocol: TCP
  - name: leader
    port: 3888
    protocol: TCP
  selector:
    app: zk-1
    ---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: zk-deployment-1
spec:
  template:
    metadata:
      labels:
        app: zk-1
    spec:
      containers:
      - name: zk1
        image: bitnami/zookeeper
        ports:
        - containerPort: 2181
        env:
        - name: ZOOKEEPER_ID
          value: "1"
        - name: ZOOKEEPER_SERVER_1
          value: zk1

在 Kubernetes 集群上运行以下命令以创建定义文件:

kubectl create -f zookeeper.yml

创建 Kafka 服务

如何在Kubernetes上设置和运行Kafka?我们现在需要创建一个 Kafka 服务定义文件。该文件通过负载平衡新的 Kafka pod 来管理 Kafka Broker 部署。基本的kafka-service.yml文件包含以下元素:

 apiVersion: v1 
 kind: Service 
 metadata:  
   labels:  
     app: kafkaApp 
   name: kafka
 spec:  
   ports:  
     -  
       port: 9092 
       targetPort: 9092
      protocol: TCP
     -  
       port: 2181 
       targetPort: 2181 
   selector:  
     app: kafkaApp 
   type: LoadBalancer

保存文件后,通过输入以下命令创建服务:

kubectl create -f kafka-service.yml

注意:在上面提到的Kafka Service定义文件中,Type设置为LoadBalancer. 如果你将Kubernetes 部署在裸机上,请使用 MetalLB,这是裸机 Kubernetes的负载均衡器实现。

Kubernetes设置和运行Kafka教程:定义 Kafka 复制控制器

创建一个额外的.yml文件作为 Kafka 的复制控制器。在我们的示例kafka-repcon.yml 中,复制控制器文件包含以下字段:

---  
 apiVersion: v1 
 kind: ReplicationController 
 metadata:  
   labels:  
     app: kafkaApp 
   name: kafka-repcon 
 spec:  
   replicas: 1
   selector:  
     app: kafkaApp 
   template:  
     metadata:  
       labels:  
         app: kafkaApp 
     spec:  
       containers:  
-
           command:  
             - zookeeper-server-start.sh 
             - /config/zookeeper.properties 
           image: "wurstmeister/kafka" 
           name: zk1 
           ports:  
             -  
               containerPort: 2181

保存复制控制器定义文件并使用以下命令创建它:

kubectl create -f kafka-repcon.yml

启动 Kafka 服务器

Kubernetes如何设置和运行Kafka?Kafka 服务器的配置属性在config/server.properties文件中定义。由于我们已经配置了 Zookeeper 服务器,请使用以下命令启动 Kafka 服务器:

kafka-server-start.sh config/server.properties

如何创建 Kafka 主题

如何在Kubernetes上设置和运行Kafka?Kafka 有一个名为kafka-topics.sh的命令行实用程序。使用此实用程序在服务器上创建主题。打开一个新的终端窗口并输入:

kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic Topic-Name

我们创建了一个名为Topic-Name 的主题,其中包含一个分区和一个副本实例。

如何启动 Kafka Producer

配置/ server.properties文件包含代理端口ID。示例中的代理正在侦听端口 9092。可以使用命令行直接指定侦听端口:

kafka-console-producer.sh --topic kafka-on-kubernetes --broker-list localhost:9092 --topic Topic-Name 

现在使用终端添加几行消息。

如何启动 Kafka 消费者

Kubernetes如何设置和运行Kafka?与生产者属性一样,默认消费者设置在config/consumer.properties文件中指定。打开一个新的终端窗口并输入消费消息的命令:

kafka-console-consumer.sh --topic Topic-Name --from-beginning --zookeeper localhost:2181 

--from-beginning命令按时间顺序列出消息。你现在可以从生产者的终端输入消息并看到它们出现在消费者的终端中。

如何扩展 Kafka 集群

使用命令终端并使用kubectl直接管理 Kafka 集群 。输入以下命令并通过将 pod 数量从一 (1) 增加到六 (6) 来快速扩展你的 Kafka 集群:

kubectl scale rc kafka-rc --replicas=6

Kubernetes设置和运行Kafka教程结论

如何在Kubernetes上设置和运行Kafka?按照本教程中的说明,你已在 Kubernetes 上成功安装了 Kafka。单个 Kafka 代理可以同时处理来自多个客户端的大量读取和写入。

如果你在 Kubernetes 集群中部署应用程序,请使用 Kafka 来提高应用程序实时交换信息的能力。

对于替代消息代理,请查看我们关于在 Kubernetes上部署 RabbitMQ的文章。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: