首页 > 其他分享 >Strimzi从入门到精通系列之二:部署Kafka

Strimzi从入门到精通系列之二:部署Kafka

时间:2023-09-11 10:03:23浏览次数:37  
标签:Kubernetes 部署 Strimzi 之二 集群 Operator Kafka



Strimzi从入门到精通系列之二:部署Kafka

  • 一、认识Strimzi
  • 二、Strimzi的核心知识点
  • 三、Kafka集群、Topic Operator、User Operator
  • 四、部署Kafka集群
  • 五、使用 Cluster Operator 部署 Topic Operator
  • 六、使用 Cluster Operator 部署 User Operator


一、认识Strimzi

Strimzi是一款用于在Kubernetes集群上管理Apache Kafka的开源项目。它使得在Kubernetes上部署、管理和监控Kafka成为可能,提供了一种高度可扩展和可靠的解决方案。Strimzi支持自动缩放、配置灵活、内置监控和告警等功能。通过使用Strimzi,用户可以将Kafka集成到Kubernetes和OpenShift中,并享受到自动化、简单部署和可靠性的好处。

二、Strimzi的核心知识点

Kafka在Kubernetes中的部署和管理:Strimzi提供了一种足够简单且可扩展的方法来在Kubernetes中部署和管理Apache Kafka集群。

操作Kafka集群:Strimzi可用于对Kafka集群进行管理和操作,包括创建和删除Kafka Topic、更改Kafka Broker配置、动态增加和减少Broker数量等。

与Kubernetes的集成:Strimzi与Kubernetes集成得非常紧密,使得Kafka集群可以受益于Kubernetes为应用程序提供的优点,如自动化、弹性、伸缩等。

自动缩放和容错:Strimzi支持Kafka自动扩容和容错,可以根据负载自动增加或减少Kafka Broker数量,同时还能够自动平衡partition分布,从而提高Kafka的可靠性和可用性。

监控和告警:Strimzi内置了监控和告警功能,可以监控Kafka集群的健康状况和性能数据,提供对Kafka集群的可视化监控和警报功能。

灵活的配置:Strimzi提供了灵活的配置选项,可以灵活地配置Kafka Broker和Topic的属性、日志级别、安全性和认证等。

扩展和定制:Strimzi是一个扩展性强、可定制的开源项目,用户可以根据自己的需求进行定制和扩展,从而满足特定的业务要求。

三、Kafka集群、Topic Operator、User Operator

为了能够使用 Cluster Operator 管理 Kafka 集群,您必须将其部署为 Kafka 资源。 Strimzi 提供了示例部署文件来执行此操作。您可以使用这些文件同时部署 Topic Operator 和 User Operator。

部署 Cluster Operator 后,使用 Kafka 资源部署以下组件:

  • Kafka集群
  • Topic Operator
  • User Operator

在安装 Kafka 时,Strimzi 还安装了 ZooKeeper 集群,并添加了连接 Kafka 和 ZooKeeper 所需的配置。

如果您尚未将 Kafka 集群部署为 Kafka 资源,则无法使用 Cluster Operator 对其进行管理。例如,这适用于在 Kubernetes 外部运行的 Kafka 集群。但是,您可以将 Topic Operator 和 User Operator 与不受 Strimzi 管理的 Kafka 集群一起使用,方法是将它们部署为独立组件。您还可以在非 Strimzi 管理的 Kafka 集群中部署和使用其他 Kafka 组件。

四、部署Kafka集群

此过程演示如何使用 Cluster Operator 将 Kafka 集群部署到 Kubernetes 集群。

该部署使用 YAML 文件来提供创建 Kafka 资源的规范。

Strimzi 提供了以下示例文件,可用于创建 Kafka 集群:

  • kafka-persistent.yaml:部署具有三个 ZooKeeper 和三个 Kafka 节点的持久集群。
  • kafka-jbod.yaml:部署具有三个 ZooKeeper 和三个 Kafka 节点(每个节点使用多个持久卷)的持久集群。
  • kafka-persistent-single.yaml:使用单个 ZooKeeper 节点和单个 Kafka 节点部署持久集群。
  • kafka-ephemeral.yaml:部署一个包含三个 ZooKeeper 和三个 Kafka 节点的临时集群。
  • kafka-ephemeral-single.yaml:部署具有三个 ZooKeeper 节点和一个 Kafka 节点的临时集群。

在此过程中,我们使用临时和持久 Kafka 集群部署的示例。

临时集群

  • 一般来说,临时(或临时)Kafka 集群适合开发和测试目的,而不适合生产。此部署使用emptyDir卷来存储代理信息(对于ZooKeeper)和主题或分区(对于Kafka)。使用emptyDir卷意味着它的内容与Pod生命周期严格相关,并且当Pod宕机时被删除。

持久集群

  • 持久性 Kafka 集群使用持久卷来存储 ZooKeeper 和 Kafka 数据。 PersistentVolume 是使用 PersistentVolumeClaim 获取的,以使其独立于 PersistentVolume 的实际类型。 PersistentVolumeClaim 可以使用 StorageClass 来触发自动卷配置。当没有指定StorageClass时,Kubernetes将尝试使用默认的StorageClass。

以下示例显示了一些常见类型的持久卷:

  • 如果您的 Kubernetes 集群在 Amazon AWS 上运行,Kubernetes 可以配置 Amazon EBS 卷
  • 如果您的 Kubernetes 集群在 Microsoft Azure 上运行,Kubernetes 可以配置 Azure 磁盘存储卷
  • 如果您的 Kubernetes 集群在 Google Cloud 上运行,Kubernetes 可以配置持久磁盘卷
  • 如果您的 Kubernetes 集群在裸机上运行,Kubernetes 可以配置本地持久卷

示例 YAML 文件指定最新支持的 Kafka 版本,以及其支持的日志消息格式版本和代理间协议版本的配置。 Kafka 配置的 inter.broker.protocol.version 属性必须是指定 Kafka 版本 (spec.kafka.version) 支持的版本。该属性表示 Kafka 集群中使用的 Kafka 协议的版本。

从Kafka 3.0.0开始,当inter.broker.protocol.version设置为3.0或更高版本时,log.message.format.version选项将被忽略,不需要设置。

升级 Kafka 时需要更新 inter.broker.protocol.version。

默认情况下,示例集群名为 my-cluster。集群名称由资源名称定义,集群部署后无法更改。要在部署集群之前更改集群名称,请编辑相关 YAML 文件中 Kafka 资源的 Kafka.metadata.name 属性。

默认集群名称和指定的Kafka版本

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  kafka:
    version: 3.4.0
    #...
    config:
      #...
      log.message.format.version: "3.4"
      inter.broker.protocol.version: "3.4"
  # ...

先决条件

  • 必须部署 Cluster Operator。

部署 Cluster Operator的详细步骤可以参考博主下面这篇技术博客:

创建并部署临时或持久集群。

创建并部署临时集群:

kubectl apply -f examples/kafka/kafka-ephemeral.yaml

创建和部署持久集群:

kubectl apply -f examples/kafka/kafka-persistent.yaml

2.检查部署状态

kubectl get pods -n <my_cluster_operator_namespace>

输出显示 Pod 名称和就绪情况

NAME                        READY   STATUS    RESTARTS
my-cluster-entity-operator  3/3     Running   0
my-cluster-kafka-0          1/1     Running   0
my-cluster-kafka-1          1/1     Running   0
my-cluster-kafka-2          1/1     Running   0
my-cluster-zookeeper-0      1/1     Running   0
my-cluster-zookeeper-1      1/1     Running   0
my-cluster-zookeeper-2      1/1     Running   0

my-cluster 是 Kafka 集群的名称。

以 0 开头的连续索引号标识创建的每个 Kafka 和 ZooKeeper Pod。

使用默认部署,您将创建一个 Entity Operator 集群、3 个 Kafka Pod 和 3 个 ZooKeeper Pod。

READY 显示已准备好/预期的副本数量。当状态显示为正在运行时,部署成功。

五、使用 Cluster Operator 部署 Topic Operator

此过程描述如何使用 Cluster Operator 部署 Topic Operator。

您配置 Kafka 资源的entityOperator 属性以包含topicOperator。默认情况下,Topic Operator 会监视 Cluster Operator 部署的 Kafka 集群的命名空间中的 KafkaTopic 资源。您还可以使用主题运算符规范中的 WatchNamespace 指定命名空间。单个主题操作员可以监视单个名称空间。一个命名空间只能由一个主题操作员监视。

如果您使用 Strimzi 将多个 Kafka 集群部署到同一命名空间,请仅为一个 Kafka 集群启用 Topic Operator,或使用 WatchedNamespace 属性配置 Topic Operator 来监视其他命名空间。

如果要将 Topic Operator 与不受 Strimzi 管理的 Kafka 集群一起使用,则必须将 Topic Operator 部署为独立组件。

先决条件

  • 必须部署 Cluster Operator。

程序

1.编辑 Kafka 资源的entityOperator 属性以包含 topicOperator:

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  #...
  entityOperator:
    topicOperator: {}
    userOperator: {}

2.使用 EntityTopicOperatorSpec 架构参考中描述的属性配置主题运算符规范。

如果您希望所有属性都使用其默认值,请使用空对象 ({})。

3.创建或更新资源:

kubectl apply -f <kafka_configuration_file>

4.检查部署状态:

kubectl get pods -n <my_cluster_operator_namespace>

输出显示 Pod 名称和就绪情况

NAME                        READY   STATUS    RESTARTS
my-cluster-entity-operator  3/3     Running   0
# ...

my-cluster 是 Kafka 集群的名称。

READY 显示已准备好/预期的副本数量。当状态显示为正在运行时,部署成功。

六、使用 Cluster Operator 部署 User Operator

此过程描述如何使用 Cluster Operator 部署 User Operator。

您配置 Kafka 资源的entityOperator 属性以包含userOperator。默认情况下,User Operator 会监视 Kafka 集群部署的命名空间中的 KafkaUser 资源。您还可以使用 User Operator 规范中的 WatchedNamespace 指定命名空间。单个用户操作员可以监视单个命名空间。一个命名空间只能由一名用户操作员监视。

如果要将 User Operator 与不受 Strimzi 管理的 Kafka 集群一起使用,则必须将 User Operator 作为独立组件部署。

先决条件

  • 必须部署 Cluster Operator。

程序

1.编辑 Kafka 资源的entityOperator 属性以包含 userOperator:

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  #...
  entityOperator:
    topicOperator: {}
    userOperator: {}

2.使用 EntityUserOperatorSpec 架构参考中描述的属性配置 User Operator 规范。

如果您希望所有属性都使用其默认值,请使用空对象 ({})。

3.创建或更新资源:

kubectl apply -f <kafka_configuration_file>

4.检查部署状态:

kubectl get pods -n <my_cluster_operator_namespace>

输出显示 Pod 名称和就绪情况

NAME                        READY   STATUS    RESTARTS
my-cluster-entity-operator  3/3     Running   0
# ...

my-cluster 是 Kafka 集群的名称。

READY 显示已准备好/预期的副本数量。当状态显示为正在运行时,部署成功。


标签:Kubernetes,部署,Strimzi,之二,集群,Operator,Kafka
From: https://blog.51cto.com/u_12080573/7432203

相关文章

  • Strimzi从入门到精通系列之一:部署Cluster Operator
    Strimzi从入门到精通系列之一:部署ClusterOperator一、认识Strimzi二、Strimzi的核心知识点三、认识ClusterOperator四、部署ClusterOperator以监视单个命名空间五、部署ClusterOperator以监视多个命名空间六、部署ClusterOperator以监视所有命名空间一、认识StrimziSt......
  • rdkafka编译
    1、下载源码rakafka源码https://github.com/confluentinc/librdkafka 2、安装openssl,可以参考https://www.cnblogs.com/ho966/p/15916018.html3、如果要支持gssapi,需要依赖cyrus-sasl和krb53.1安装krb5下载源码https://kerberos.org/dist/krb5/1.20/krb5-1.2......
  • 软件设计模式系列之二———抽象工厂模式
    1抽象工厂模式的定义抽象工厂模式是一种创建型设计模式,它提供了一种创建一组相关或相互依赖对象的方式,而无需指定它们的具体类。该模式以一组抽象接口为核心,包括抽象工厂接口和一组抽象产品接口,每个具体工厂类负责创建特定产品家族,保证这些产品之间的兼容性。客户端代码通过与抽......
  • OGG-将PostgreSQL通过OGG_BigData同步到Kafka后数据存在8小时时间差
    问题描述:将PostgreSQL通过OGG_BigData同步到Kafka后数据存在8小时时间差。 问题原因:kafka.properties中的参数goldengate.userexit.timestamp=utc解决办法:修改kafka.properties中的参数goldengate.userexit.timestamp为utc+8,然后重启目标端replicat进程。 ......
  • ClickHouse Kafka引擎
    转:https://blog.csdn.net/qq_28603127/article/details/109556177Kafka引擎用力读取kafka中的数据,创建表语句CREATETABLE[IFNOTEXISTS][db.]table_name[ONCLUSTERcluster](name1[type1][DEFAULT|MATERIALIZED|ALIASexpr1],name2[type2][DEFAULT|MATER......
  • kafka复习:(22)一个分区只能被消费者组中的一个消费者消费吗?
    默认情况下,一个分区只能被消费者组中的一个消费者消费。但可以自定义PartitionAssignor来打破这个限制。一、自定义PartitionAssignor.packagecom.cisdi.dsp.modules.metaAnalysis.rest.kafka2023;importorg.apache.kafka.clients.consumer.internals.AbstractPartitionAssign......
  • kafka复习:(24)consume-transform-produce模式
    packagecom.cisdi.dsp.modules.metaAnalysis.rest.kafka2023;importorg.apache.kafka.clients.consumer.*;importorg.apache.kafka.clients.producer.KafkaProducer;importorg.apache.kafka.clients.producer.ProducerConfig;importorg.apache.kafka.clients.produc......
  • docker 中安装kafka
    docker中安装kafka docker中安装kafka在安装kafka之前需要先安装zookeeper,因为kafka启动会将元数据保存在zookeeper中,zookeeper是一种分布式协调服务,可以再分布式系统中共享配置,协调锁资源,提供命名服务。zookeeper安装1、在docker中拉取zookeeper镜像dockerpull......
  • 【Kafka3.0】生产调优
    目录1.Kafka硬件配置选择场景说明服务器台数选择磁盘选择内存选择CPU选择2.KafkaBroker调优Broker核心参数配置服役新节点/退役旧节点增加副本因子调整分区副本存储3.Kafka生产者调优生产者如何提高吞吐量数据可靠性数据去重数据乱序4.Kafka消费者调优消费者重要参数......
  • Flink kafka source
    kafkasource接收kafka的数据<!--Kafka相关依赖--><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>2.8.0</version>......