Kubernetes上的Kafka,Strimzi方式!(第1部分)
在本文中,学习如何在Kubernetes上运行Kafka。
我以前的一些博客文章(例如,在Kubernetes上使用Kafka Connect ,这很简单!)演示了如何以Kubernetes原生方式使用Kafka Connect。这是系列博客文章的第一篇,该系列文章将使用Strimzi Operator在Kubernetes上介绍Apache Kafka。在本文中,我们将从最简单的设置开始,即单节点Kafka(和Zookeeper)集群,并学习:
- Strimzi概述和设置
- Kafka集群安装
- 在后台使用/创建的Kubernetes资源
- 使用Kubernetes集群中的客户端测试Kafka设置
该代码在GitHub上可用-https: //github.com/abhirockzz/kafka-kubernetes-strimzi
我需要尝试什么?
kubectl
- https://kubernetes.io/docs/tasks/tools/install-kubectl/
我将使用Azure Kubernetes服务(AKS)来演示概念,但是总的来说,它独立于Kubernetes提供程序(例如,可以随意使用本地设置,如minikube
)。如果要使用AKS
,您只需一个Microsoft Azure帐户,如果您还没有帐户,则可以免费获得。
安装 Helm
我将使用Helm
install Strimzi
。这是要自行安装的文档Helm
-https: //helm.sh/docs/intro/install/
您也可以
YAML
直接使用这些文件进行安装Strimzi
。在此处查看快速入门指南-https: //strimzi.io/docs/quickstart/latest/#proc-install-product-str
(可选)安装Azure Kubernetes服务
Azure Kubernetes服务(AKS)使在Azure中部署托管Kubernetes群集变得简单。通过将大量责任转移到Azure上,它降低了管理Kubernetes的复杂性和运营开销。以下是如何使用以下方法设置AKS群集的示例
设置群集后,您可以轻松配置kubectl
以指向它
JAVA
az aks get-credentials --resource-group <CLUSTER_RESOURCE_GROUP> --name <CLUSTER_NAME>
等一下,什么Strimzi
?
从Strimzi文档中
Strimzi
简化了在Kubernetes集群中运行Apache Kafka的过程。Strimzi提供了容器映像和操作员,用于在Kubernetes上运行Kafka。作为项目的一部分Cloud Native Computing Foundation
(撰写本文时)Sandbox
Strimzi Operators
是该项目的基础。这些操作员是专门设计的,具有专业的操作知识,可以有效地管理Kafka。运营商简化了以下过程:部署和运行Kafka集群和组件,配置和保护对Kafka的访问,升级和管理Kafka,甚至负责管理主题和用户。
下图显示了10,000英尺的操作员角色概览:
安装Strimzi
Strimzi
使用安装Helm
非常简单:
//add helm chart repo for Strimzi helm repo add strimzi https://strimzi.io/charts/ //install it! (I have used strimzi-kafka as the release name) helm install strimzi-kafka strimzi/strimzi-kafka-operator
这将安装Strimzi
操作(这不过是Deployment
),自定义资源的定义和其他Kubernetes组件,如Cluster Roles
,Cluster Role Bindings
和Service Accounts
有关更多详细信息,请查看此链接
要删除,只需
helm uninstall strimzi-kafka
要确认已部署Strimzi Operator,请检查它是否已安装Pod
(Running
一段时间后应转换为状态)
kubectl get pods -l=name=strimzi-cluster-operator NAME READY STATUS RESTARTS AGE strimzi-cluster-operator-5c66f679d5-69rgk 1/1 Running 0 43s
还要检查自定义资源定义:
kubectl get crd | grep strimzi kafkabridges.kafka.strimzi.io 2020-04-13T16:49:36Z kafkaconnectors.kafka.strimzi.io 2020-04-13T16:49:33Z kafkaconnects.kafka.strimzi.io 2020-04-13T16:49:36Z kafkaconnects2is.kafka.strimzi.io 2020-04-13T16:49:38Z kafkamirrormaker2s.kafka.strimzi.io 2020-04-13T16:49:37Z kafkamirrormakers.kafka.strimzi.io 2020-04-13T16:49:39Z kafkas.kafka.strimzi.io 2020-04-13T16:49:40Z kafkatopics.kafka.strimzi.io 2020-04-13T16:49:34Z kafkausers.kafka.strimzi.io 2020-04-13T16:49:33Z
kafkas.kafka.strimzi.io
CRD代表Kubernetes中的Kafka集群
现在我们已经连接了“大脑”(Strimzi运算符),让我们使用它!
是时候创建一个Kafka集群了!
如前所述,我们将使事情变得简单,并从以下设置开始(我们将逐步更新该设置,作为本系列后续文章的一部分):
- 单节点Kafka集群(和Zookeeper)
- 内部可用于同一Kubernetes集群中的客户端
- 没有加密,认证或授权
- 无持久性(使用
emptyDir
量)
要部署Kafka集群,我们要做的就是创建一个Strimzi Kafka
资源。看起来是这样的:
apiVersion: kafka.strimzi.io/v1beta1 kind: Kafka metadata: name: my-kafka-cluster spec: kafka: version: 2.4.0 replicas: 1 listeners: plain: {} config: offsets.topic.replication.factor: 1 transaction.state.log.replication.factor: 1 transaction.state.log.min.isr: 1 log.message.format.version: "2.4" storage: type: ephemeral zookeeper: replicas: 1 storage: type: ephemeral
有关
Kafka
CRD 的详细参考,请查阅文档-https://strimzi.io/docs/operators/master/using.html#type-Kafka-reference
我们在中定义my-kafka-cluster
群集的名称()metadata.name
。以下是的属性摘要spec.kafka
:
version
-Kafka经纪人版本(2.5.0
在撰写本文时默认为,但我们正在使用2.4.0
)replicas
-Kafka群集大小,即Kafka节点数(Pod
群集中的s)listeners
-配置Kafka代理的侦听器。在此示例中,我们使用plain
侦听器,这意味着内部客户端(在同一Kubernetes群集中)可通过端口访问该群集9092
(不涉及加密,身份验证或授权)。支持的类型包括plain
,tls
,external
(见https://strimzi.io/docs/operators/master/using.html#type-KafkaListeners-reference)。可以配置多个侦听器(我们将在后续的博客文章中介绍)config
-这些是用作Kafka经纪人配置属性的键值对storage
-用于Kafka群集的存储。支持的类型包括ephemeral
,persistent-claim
和jbod
。ephemeral
在此示例中,我们使用的是使用emptyDir
卷,并且数据仅与Kafka经纪人的存续时间相关Pod
(以后的博客文章将介绍persistent-claim
存储)
Zookeeper群集详细信息(spec.zookeeper
)与Kafka类似。在这种情况下,我们只配置no。的replicas
和storage
类型。有关详细信息,请参阅https://strimzi.io/docs/operators/master/using.html#type-ZookeeperClusterSpec-reference
要创建Kafka集群:
kubectl apply -f https://raw.githubusercontent.com/abhirockzz/kafka-kubernetes-strimzi/master/part-1/kafka.yaml
下一步是什么?
Strimzi运算符开始行动并创建许多Kubernetes资源,以响应Kafka
我们刚刚创建的CRD实例。
创建了以下资源:
StatefulSet
-Kafka和Zookeeper集群以StatefulSet
s 的形式存在,用于管理Kubernetes中的有状态工作负载。请参阅https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/和相关材料以了解详细信息Service
-KubernetesClusterIP
服务用于内部访问ConfigMap
-卡夫卡与动物园管理员配置存储在KubernetesConfigMap
小号Secret
-KubernetesSecret
用于存储Kafka集群组件和客户端的私钥和证书。这些用于TLS加密和身份验证(在后续博客文章中介绍)
Kafka自定义资源
kubectl get kafka NAME DESIRED KAFKA REPLICAS DESIRED ZK REPLICAS my-kafka-cluster 1
StatefulSet
和 Pod
StatefulSet
使用以下命令检查Kafka和Zookeeper :
kubectl get statefulset/my-kafka-cluster-zookeeper kubectl get statefulset/my-kafka-cluster-kafka
Kafka and Zookeeper Pod
s
kubectl get pod/my-kafka-cluster-zookeeper-0 kubectl get pod/my-kafka-cluster-kafka-0
ConfigMap
ConfigMap
创建了个人来存储Kafka
和Zookeeper
配置
kubectl get configmap my-kafka-cluster-kafka-config 4 19m my-kafka-cluster-zookeeper-config 2 20m
让我们来看看Kafka的配置
kubectl get configmap/my-kafka-cluster-kafka-config -o yaml
输出是相当长的,但我将突出显示重要的部分。作为数据部分的一部分,Kafka代理有两个配置属性- log4j.properties
和server.config
。
这是的摘要server.config
。请注意advertised.listeners
(突出显示了通过端口的内部访问9092
)和User provided configuration
(我们在yaml
清单中指定的访问)
############################## ############################## # This file is automatically generated by the Strimzi Cluster Operator # Any changes to this file will be ignored and overwritten! ############################## ############################## broker.id=${STRIMZI_BROKER_ID} log.dirs=/var/lib/kafka/data/kafka-log${STRIMZI_BROKER_ID} ########## # Plain listener ########## ########## # Common listener configuration ########## listeners=REPLICATION-9091://0.0.0.0:9091,PLAIN-9092://0.0.0.0:9092 advertised.listeners=REPLICATION-9091://my-kafka-cluster-kafka-${STRIMZI_BROKER_ID}.my-kafka-cluster-kafka-brokers.default.svc:9091,PLAIN-9092://my-kafka-cluster-kafka-${STRIMZI_BROKER_ID}.my-kafka-cluster-kafka-brokers.default.svc:9092 listener.security.protocol.map=REPLICATION-9091:SSL,PLAIN-9092:PLAINTEXT inter.broker.listener.name=REPLICATION-9091 sasl.enabled.mechanisms= ssl.secure.random.implementation=SHA1PRNG ssl.endpoint.identification.algorithm=HTTPS ########## # User provided configuration ########## log.message.format.version=2.4 offsets.topic.replication.factor=1 transaction.state.log.min.isr=1 transaction.state.log.replication.factor=1
Service
如果查询Service
s,则应该看到类似以下内容:
kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) my-kafka-cluster-kafka-bootstrap ClusterIP 10.0.240.137 <none> 9091/TCP,9092/TCP my-kafka-cluster-kafka-brokers ClusterIP None <none> 9091/TCP,9092/TCP my-kafka-cluster-zookeeper-client ClusterIP 10.0.143.149 <none> 2181/TCP my-kafka-cluster-zookeeper-nodes ClusterIP None <none> 2181/TCP,2888/TCP,3888/TCP
my-kafka-cluster-kafka-bootstrap
内部Kubernetes客户端可以访问Kafka集群,my-kafka-cluster-kafka-brokers
并且该Headless
服务对应于StatefulSet
Secret
尽管我们没有使用它们,但是查看Secret
由创建的会很有帮助Strimzi
:
kubectl get secret my-kafka-cluster-clients-ca Opaque my-kafka-cluster-clients-ca-cert Opaque my-kafka-cluster-cluster-ca Opaque my-kafka-cluster-cluster-ca-cert Opaque my-kafka-cluster-cluster-operator-certs Opaque my-kafka-cluster-kafka-brokers Opaque my-kafka-cluster-kafka-token-vb2qt kubernetes.io/service-account-token my-kafka-cluster-zookeeper-nodes Opaque my-kafka-cluster-zookeeper-token-xq8m2 kubernetes.io/service-account-token
创建一个生产者Pod
:
export KAFKA_CLUSTER_NAME=my-kafka-cluster kubectl run kafka-producer -ti --image=strimzi/kafka:latest-kafka-2.4.0 --rm=true --restart=Never -- bin/kafka-console-producer.sh --broker-list $KAFKA_CLUSTER_NAME-kafka-bootstrap:9092 --topic my-topic
在另一个终端中,创建一个使用者Pod
:
export KAFKA_CLUSTER_NAME=my-kafka-cluster kubectl run kafka-consumer -ti --image=strimzi/kafka:latest-kafka-2.4.0 --rm=true --restart=Never -- bin/kafka-console-consumer.sh --bootstrap-server $KAFKA_CLUSTER_NAME-kafka-bootstrap:9092 --topic my-topic --from-beginning
上述论证是从Strimzi文档拍摄- https://strimzi.io/docs/operators/master/deploying.html#deploying-example-clients-str
您也可以使用其他客户端
我们才刚刚开始...
1. 本站资源转自互联网,源码资源分享仅供交流学习,下载后切勿用于商业用途,否则开发者追究责任与本站无关!
2. 本站使用「署名 4.0 国际」创作协议,可自由转载、引用,但需署名原版权作者且注明文章出处
3. 未登录无法下载,登录使用金币下载所有资源。
IT小站 » Kubernetes上的Kafka,Strimzi方式!(第1部分)
常见问题FAQ
- 没有金币/金币不足 怎么办?
- 本站已开通每日签到送金币,每日签到赠送五枚金币,金币可累积。
- 所有资源普通会员都能下载吗?
- 本站所有资源普通会员都可以下载,需要消耗金币下载的白金会员资源,通过每日签到,即可获取免费金币,金币可累积使用。