在本文中,您将学习如何在 Kubernetes 上运行 ksqlDB 并将其与 Spring Boot 一起使用。您还将了解如何基于 Strimzi 运算符在 Kubernetes 上运行 Kafka。
为了将 Spring Boot 与 ksqlDB 服务器集成,我们将利用 ksqlDB 提供的轻量级 Java 客户端。此客户端支持拉取和推送查询。它还提供了用于插入行和创建表或流的 API。 您可以在此处 的 ksqlDB 文档中阅读有关它的更多信息。
我们的示例 Spring Boot 应用程序非常简单。我们将使用 Spring Cloud Stream Supplierbean 生成事件并将其发送到 Kafka 主题。有关使用 Spring Cloud Stream 的 Kafka 的更多信息,请参阅以下 文章 。
另一方面,我们的应用程序使用 kSQL 查询从 Kafka 主题获取数据。它还KTable在启动时创建。
源代码
如果您想自己尝试一下,可以随时查看我的源代码。为此,您需要克隆我的 GitHub 存储库 。然后进入transactions-service目录。之后,您应该按照我的指示进行操作。让我们开始。
先决条件
我们将使用几种工具。你需要有:
- Kubernetes 集群——它可能是一个单节点的本地集群,例如 Minikube 或 Kind。就个人而言,我在 Docker 桌面上使用 Kubernetes
- kubectlCLI – 与集群交互
- Helm——我们将使用它在 Kubernetes 上安装 ksqlDB 服务器。如果您没有 Helm,则必须安装它
使用 Strimzi 在 Kubernetes 上运行 Kafka
当然,我们需要一个 Kafka 实例来执行我们的练习。有几种方法可以在 Kubernetes 上运行 Kafka。我将向您展示如何使用基于运算符的方法来实现。第一步,您需要在集群上安装 OLM(Operator Lifecycle Manager)。为此,您只需在 Kubernetes 上下文中执行以下命令:
$ curl -L https:<font><i>//github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.21.2/install.sh -o install.sh</i></font><font>
$ chmod +x install.sh
$ ./install.sh v0.21.2
</font>
然后,您可以继续安装 Strimzi 操作员。这只是一个命令。
$ kubectl create -f https:<font><i>//operatorhub.io/install/stable/strimzi-kafka-operator.yaml</i></font><font>
</font>
现在,我们可以在 Kubernetes 上创建一个 Kafka 集群。让我们从练习的专用命名空间开始:
$ kubectl create ns kafka
我假设你有一个单节点 Kubernetes 集群,所以我们还创建了一个单节点 Kafka。Kafka这是带有CRD的 YAML 清单。您可以在路径下的存储库中找到它k8s/cluster.yaml。
apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
name: my-cluster
spec:
entityOperator:
topicOperator: {}
userOperator: {}
kafka:
config:
<b>default</b>.replication.factor: 1
inter.broker.protocol.version: <font>"3.2"</font><font>
min.insync.replicas: 1
offsets.topic.replication.factor: 1
transaction.state.log.min.isr: 1
transaction.state.log.replication.factor: 1
listeners:
- name: plain
port: 9092
tls: false
type: internal
- name: tls
port: 9093
tls: <b>true</b>
type: internal
replicas: 1
storage:
type: jbod
volumes:
- id: 0
type: persistent-claim
size: 30Gi
deleteClaim: <b>true</b>
version: 3.2.0
zookeeper:
replicas: 1
storage:
type: persistent-claim
size: 10Gi
deleteClaim: <b>true</b>
</font>
让我们将它应用到命名空间中的 Kubernetes kafka:
$