tnblog
首页
视频
资源
登录

Dapr 官方教程第五章(Dapr 绑定kafka)

7377人阅读 2021/9/4 15:54 总访问:3467641 评论:0 收藏:0 手机
分类: 云产品

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集群环境即可

本地运行


将此快速入门存储库克隆到您的本地计算机:

  1. git clone https://github.com/dapr/quickstarts.git
  2. cd quickstarts/bindings/

在本地运行 Kafka Docker 容器


为了在本地运行 Kafka 绑定快速入门,您将在机器上的 docker 容器中运行Kafka 代理服务器。

  1. docker-compose -f ./docker-compose-single-kafka.yml up -d
  2. docker ps

使用输入绑定运行Node微服务


现在您的机器上本地运行了 Kafka,您需要运行微服务。您将首先运行使用输入绑定的 Node 微服务:

  1. # 在 CLI 中导航到 Node 订阅者目录
  2. cd nodeapp/
  3. # 安装依赖
  4. npm install
  5. # 使用 Dapr 运行 Node 应用
  6. dapr run --app-id bindings-nodeapp --app-port 3000 node app.js --components-path ../components

使用输出绑定运行 Python 微服务


接下来,运行使用输出绑定的 Python 微服务

  1. # 打开一个新的 CLI 窗口并导航到 CLI 中的 Python 订阅者目录
  2. cd pythonapp/
  3. # 安装依赖
  4. pip3 install requests
  5. # 使用 Dapr 运行 Python 应用程序
  6. dapr run --app-id bindings-pythonapp python3 app.py --components-path ../components

观察日志


观察 Python 日志,其中显示了与 Kafka 的成功输出绑定:


观察 Node 日志,其中显示了与 Kafka 的成功输入绑定:

清理


要彻底停止 dapr 微服务,请运行:

  1. dapr stop --app-id bindings-nodeapp
  2. dapr stop --app-id bindings-pythonapp


完成后,您可以通过运行以下命令来关闭本地 Kafka Docker 容器:

  1. docker-compose -f ./docker-compose-single-kafka.yml down

在 Kubernetes 中运行

在 Kubernetes 中设置 Kafka


通过bitnami/kafka安装 Kafka

  1. helm repo add bitnami https://charts.bitnami.com/bitnami
  2. helm repo update
  3. kubectl create ns kafka
  4. helm install dapr-kafka bitnami/kafka --wait --namespace kafka -f ./kafka-non-persistence.yaml


等待 kafka pod 运行

  1. kubectl -n kafka get pods -w

k8s部署应用


现在 Kafka 绑定已设置,马上部署应用。

  1. # 在您的 CLI 窗口中,在 bindings 目录中运行
  2. kubectl apply -f ./deploy


这将部署 bindings-nodeapp 和 bindings-pythonapp 微服务。它还将应用您在上一步中设置的 Kafka 绑定组件配置。
Kubernetes 部署是异步的。这意味着您需要等待部署完成,然后才能继续下一步。您可以使用以下命令执行此操作:

  1. kubectl rollout status deploy/bindings-nodeapp
  2. kubectl rollout status deploy/bindings-pythonapp

观察日志


观察 Python 应用程序日志,其中显示了与 Kafka 的成功输出绑定:

  1. kubectl get pods


运行以下命令查看 Python 应用程序日志:

  1. kubectl logs --selector app=bindingspythonapp -c python --tail=-1


观察 Node 应用程序日志,其中显示了与 Kafka 的成功输入合并:

  1. kubectl logs --selector app=bindingsnodeapp -c node --tail=-1

清理


完成后,您可以通过运行以下命令来减少 Kubernetes 删除:

  1. kubectl delete -f ./deploy


这将删除deploy目录中.yaml 文件定义的每个资源,包括 kafka 组件。
删除所有快速入门应用程序后,请删除集群中的 Kafka

  1. helm uninstall dapr-kafka --namespace kafka


最后,您可以删除 kafka 命名空间

  1. kubectl delete ns kafka

这个怎么运作


现在您已经在本地和/或 Kubernetes 中运行了快速入门,让我们解开这一切的工作原理。该应用程序分为输入绑定应用程序和输出绑定应用程序。

Kafka 绑定 yaml


看应用程序代码之前,让我们看到了 kafka 绑定组件yamls(本地和Kubernetes)。
——其中brokers规定了 kafka 的连接
——topics并consumerGroup为消费者
——publishTopic发行商的话题。

看到HOWTO文档引用了输入和输出绑定的细节
此配置 yaml 创建sample-topic组件以通过 Kafkasample主题设置 Kafka 输入和输出绑定。

  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4. name: sample-topic
  5. spec:
  6. type: bindings.kafka
  7. version: v1
  8. metadata:
  9. # Kafka代理连接设置
  10. - name: brokers
  11. value: [kafka broker address]
  12. # 消费者配置:主题和消费者组
  13. - name: topics
  14. value: sample
  15. - name: consumerGroup
  16. value: group1
  17. # 发布服务器配置:主题
  18. - name: publishTopic
  19. value: sample
  20. - name: authRequired
  21. 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

评价
这一世以无限游戏为使命!
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术