
Dapr 官方教程第五章(Dapr 绑定kafka)
在本快速入门中,您将创建两个微服务,一个具有输入绑定,另一个具有输出绑定。您将绑定到 Kafka,但请注意,Dapr 可以绑定无数组件(请参阅 Dapr 组件)。
本快速入门包括两个微服务:
——使用输入绑定的 Node.js 微服务
——使用输出绑定的 Python 微服务
这些绑定连接到 Kafka,允许我们将消息推送到 Kafka 实例(来自 Python 微服务)并从该实例(来自 Node 微服务)接收消息,而无需知道该实例的托管位置。相反,使用 Dapr API 通过 sidecar 进行连接。查看架构图以了解组件如何在本地互连:
先决条件
在本地运行的先决条件
Dapr CLI 与 Dapr 初始化
Node.js 8 或更高版本
Python 3.4 或更高版本
在 Kubernetes 中运行的先决条件
有dapr的k8s集群环境即可
本地运行
将此快速入门存储库克隆到您的本地计算机:
git clone https://github.com/dapr/quickstarts.git
cd quickstarts/bindings/
在本地运行 Kafka Docker 容器
为了在本地运行 Kafka 绑定快速入门,您将在机器上的 docker 容器中运行Kafka 代理服务器。
docker-compose -f ./docker-compose-single-kafka.yml up -d
docker ps
使用输入绑定运行Node微服务
现在您的机器上本地运行了 Kafka,您需要运行微服务。您将首先运行使用输入绑定的 Node 微服务:
# 在 CLI 中导航到 Node 订阅者目录
cd nodeapp/
# 安装依赖
npm install
# 使用 Dapr 运行 Node 应用
dapr run --app-id bindings-nodeapp --app-port 3000 node app.js --components-path ../components
使用输出绑定运行 Python 微服务
接下来,运行使用输出绑定的 Python 微服务
# 打开一个新的 CLI 窗口并导航到 CLI 中的 Python 订阅者目录
cd pythonapp/
# 安装依赖
pip3 install requests
# 使用 Dapr 运行 Python 应用程序
dapr run --app-id bindings-pythonapp python3 app.py --components-path ../components
观察日志
观察 Python 日志,其中显示了与 Kafka 的成功输出绑定:
观察 Node 日志,其中显示了与 Kafka 的成功输入绑定:
清理
要彻底停止 dapr 微服务,请运行:
dapr stop --app-id bindings-nodeapp
dapr stop --app-id bindings-pythonapp
完成后,您可以通过运行以下命令来关闭本地 Kafka Docker 容器:
docker-compose -f ./docker-compose-single-kafka.yml down
在 Kubernetes 中运行
在 Kubernetes 中设置 Kafka
通过bitnami/kafka安装 Kafka
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
kubectl create ns kafka
helm install dapr-kafka bitnami/kafka --wait --namespace kafka -f ./kafka-non-persistence.yaml
等待 kafka pod 运行
kubectl -n kafka get pods -w
k8s部署应用
现在 Kafka 绑定已设置,马上部署应用。
# 在您的 CLI 窗口中,在 bindings 目录中运行
kubectl apply -f ./deploy
这将部署 bindings-nodeapp 和 bindings-pythonapp 微服务。它还将应用您在上一步中设置的 Kafka 绑定组件配置。
Kubernetes 部署是异步的。这意味着您需要等待部署完成,然后才能继续下一步。您可以使用以下命令执行此操作:
kubectl rollout status deploy/bindings-nodeapp
kubectl rollout status deploy/bindings-pythonapp
观察日志
观察 Python 应用程序日志,其中显示了与 Kafka 的成功输出绑定:
kubectl get pods
运行以下命令查看 Python 应用程序日志:
kubectl logs --selector app=bindingspythonapp -c python --tail=-1
观察 Node 应用程序日志,其中显示了与 Kafka 的成功输入合并:
kubectl logs --selector app=bindingsnodeapp -c node --tail=-1
清理
完成后,您可以通过运行以下命令来减少 Kubernetes 删除:
kubectl delete -f ./deploy
这将删除deploy目录中.yaml 文件定义的每个资源,包括 kafka 组件。
删除所有快速入门应用程序后,请删除集群中的 Kafka
helm uninstall dapr-kafka --namespace kafka
最后,您可以删除 kafka 命名空间
kubectl delete ns kafka
这个怎么运作
现在您已经在本地和/或 Kubernetes 中运行了快速入门,让我们解开这一切的工作原理。该应用程序分为输入绑定应用程序和输出绑定应用程序。
Kafka 绑定 yaml
看应用程序代码之前,让我们看到了 kafka 绑定组件yamls(本地和Kubernetes)。
——其中brokers
规定了 kafka 的连接
——topics并consumerGroup
为消费者
——publishTopic
发行商的话题。
看到HOWTO文档引用了输入和输出绑定的细节
此配置 yaml 创建sample-topic
组件以通过 Kafkasample主题设置 Kafka 输入和输出绑定。
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: sample-topic
spec:
type: bindings.kafka
version: v1
metadata:
# Kafka代理连接设置
- name: brokers
value: [kafka broker address]
# 消费者配置:主题和消费者组
- name: topics
value: sample
- name: consumerGroup
value: group1
# 发布服务器配置:主题
- name: publishTopic
value: sample
- name: authRequired
value: "false"
Node输入绑定应用
导航到该nodeapp目录并打开app.jsNode.js 输入绑定示例应用程序的代码。在这里,您使用 公开了一个 API 端点express。API 名称必须与 Kafka 绑定组件 yaml 中指定的组件名称相同。然后 Dapr 运行时将使用来自sample主题的事件,然后将带有事件负载的 POST 请求发送到 Node 应用程序。
Python 输出绑定应用程序
导航到pythonapp
目录并打开app.py
输出绑定示例应用程序的代码。这将每秒向 Dapr http 端点发送http://localhost:3500/v1.0/bindings/<output_bindings_name>
带有事件负载的POST 请求。此应用程序使用sample-topic
绑定组件名称作为<output_bindings_name>
. 然后 Dapr 运行时将事件发送到sample上述 Kafka 绑定组件 yaml 中指定的主题。
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

