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