AI 年度盘点与2025发展趋势展望,50+案例解析亮相AICon 了解详情
写点什么

使用 API Gateway 监管客户端与 Apache Kafka 之间的交互

  • 2020-04-08
  • 本文字数:3788 字

    阅读完需:约 12 分钟

使用 API Gateway 监管客户端与 Apache Kafka 之间的交互

有时,您可能会自问:


  • 如何为 Amazon Managed Streaming for Apache Kafka (MSK) 实施 IAM 身份验证或授权?

  • 如何根据特定的场景保护我的 Apache Kafka 集群,防止流量峰值的影响,同时又无需设置集群的配额?

  • 如何验证请求是否符合 JSON Schema?

  • 如何确保 URI、查询字符串和标头中包含参数?

  • Amazon MSK 如何在不需要代理或原生 Apache Kafka 协议的情况下提取消息轻量客户端?


这些需求可使用自定义的代理服务器或网关来实现,但都可能难以实施和管理。而 API Gateway 具有所有这些功能并且是一项完全托管的 AWS 服务。


在本文中,我们将演示 Amazon API Gateway 如何作为 Amazon MSK 集群和客户端之间的一个组件来解决这些问题。


Amazon MSK 是一款适用于 Apache Kafka 的完全托管的服务,借助它只需几次点击即可轻松预置 Kafka 集群,不再需要手动预置服务器、管理存储或者配置 Apache Zookeeper。Apache Kafka 是 一个开源平台,可用于构建实时的流式处理数据管道和应用程序。


本文讨论的一些场景包括从不支持原生 Kafka 协议的轻量级 IoT 设备中提取消息,以及将您的流式处理服务与其他后端服务(包括第三方 API)进行编排。


在进行网关架构设计的时候还需要权衡考虑以下几个因素:


  • 要运行和维护其他服务的成本与复杂性。

  • 由于增加额外的处理能力来构建和提出 HTTP 请求导致的性能开销。此外,REST 代理需要解释请求,为生产请求和消费请求执行数据格式转换。


当您在生产环境中实施这种架构时,您应结合您的使用业务使用案例以及 SLA 需求综合考虑。

解决方案概览

要实施此解决方案,请完成下列步骤:


  1. 创建 MSK 集群、Kafka 客户端和 Kafka REST 代理

  2. 在 Kafka 客户端机上创建 Kafka 主题并配置 REST 代理

  3. 通过 API Gateway 创建与 REST 代理集成的 API

  4. 通过向 Amazon MSK 生产与消费消息的端到端的测试


下图演示了解决方案的架构。



在此架构中,您将创建一个 MSK 集群,并使在一台 Amazon EC2 实例上配置好 Kaflka 客户端和 REST 代理。然后,您将通过 Amazon API Gateway 暴露该 REST 代理,还将使用 Postman 向 Amazon MSK 生成消息以测试此解决方案。


对于生产实施,请务必将 REST 代理部署在负载均衡器后面的 Auto Scaling 组当中。

先决条件

在开始操作前,您必须满足以下先决条件:


  • 拥有一个具有 AWS 服务访问权限的 AWS 账户。

  • 拥有一个具有访问密钥和秘密访问密钥的 IAM 用户,用于配置 AWS CLI

  • 一个 Amazon EC2 密钥对

创建 MSK 集群、Kafka 客户端和 REST 代理

AWS CloudFormation 将会预置所有需要的资源,包括 VPC、子网、安全组、Amazon MSK 集群、Kafka 客户端和 Kafka REST 代理。要创建这些资源,请完成以下步骤:


  1. us-east-1us-west-2 区域启动

  2. 完成此过程需要大约 15 到 20 分钟。

  3. 在 AWS CloudFormation 控制台上,选择 AmzonMSKAPIBlog

  4. 记下输出下的 MSKClusterARNKafkaClientEC2InstancePublicDNSMSKSecurityGroupID 详细信息



4. 输入以下代码,获取有关集群的 ZooKeeperConnectionString 和其他信息(须提供您的区域、集群 ARN 和 AWS 指定的配置文件):


$ aws kafka describe-cluster --region <Replace_With_us-east-1_or_us-west-2> --cluster-arn <Replace_With_Your_cluster-arn> --profile <Replace_With_Your_Profile>
复制代码


下面的示例代码显示了此命令输出中的一行:


{….…."ZookeeperConnectString": "z-2.XXXXXX.us-east-1.amazonaws.com:2181,z-3.XXXXXX.us-east-1.amazonaws.com:2181,z-1.XXXXXX.us-east-1.amazonaws.com:2181"}
复制代码


  1. 输入以下代码(须提供您的区域、集群 ARN 和 AWS 指定的配置文件),获取 BootstrapBrokerString:__


$ aws kafka get-bootstrap-brokers --region <Replace_With_us-east-1_or_us-west-2> --cluster-arn "<Replace_With_us-east-1_or_us-west-2>" --profile <Replace_With_Your_Profile>
复制代码


下面的示例代码显示了此命令的输出:


{    "BootstrapBrokerString": "b-2.XXXXXXXXXXXX.us-east-1.amazonaws.com:9092,b-1.XXXXXXXXXXXX.amazonaws.com:9092,b-3.XXXXXXXXXXXX.us-east- }
复制代码

创建 Kafka 主题并配置 Kafka REST 代理

要在 Kafka 客户端机上创建 Kafka 主题并配置 Kafka REST 代理,请完成以下步骤:


  1. 通过 SSH 登录您的 Kafka 客户端 Amazon EC2 实例。请参见以下代码:


ssh -i <Replace_With_Your_pemfile> ec2-user@<Replace_With_Your_KafkaClientDNS>
复制代码


  1. 在客户端机上进入 Apache Kafka 安装的二进制包文件夹 (kafka/kafka_2.12-2.2.1/bin/)。

  2. 通过输入以下代码创建主题(须提供上一步中取得的 ZookeeperConnectString 值):


./kafka-topics.sh --create --zookeeper <Replace_With_Your_ZookeeperConnectString> --replication-factor 3 --partitions 1 --topic amazonmskapigwblog
复制代码


如果命令成功执行,您将看到以下消息:已创建主题 amazonmskapigwblog


  1. 要将 Kafka REST 服务器连接到 Amazon MSK 集群,请修改目录 (/home/ec2-user/confluent-5.3.1/etc/kafka-rest/) 中的 kafka-rest.properties,以指向您的 Amazon MSK 的 ZookeeperConnectStringBootstrapserversConnectString 信息。请参见以下代码:


sudo vi /home/ec2-user/confluent-5.3.1/etc/kafka-rest/kafka-rest.properties
zookeeper.connect=<Replace_With_Your_ZookeeperConnectString>

复制代码


此外(此步骤可选),您还可以创建一个 SSL 以保护 REST 客户端与 REST 代理之间的通信 (HTTPS)。如果不需要 SSL,您可以跳过第 5 步和第 6 步。


  1. 生成服务器和客户端证书。有关更多信息,请参阅 Confluent 网站上的创建 SLL 密钥和证书

  2. 将必要的属性配置添加到 kafka-rest.properties 配置文件。请参见以下代码示例:


listeners=http://0.0.0.0:8082,https://0.0.0.0:8085ssl.truststore.location=<Replace_With_Your_tuststore.jks>ssl.truststore.password=<Replace_With_Your_tuststorepassword>ssl.keystore.location=<Replace_With_Your_keystore.jks>ssl.keystore.password=<Replace_With_Your_keystorepassword>ssl.key.password=<Replace_With_Your_sslkeypassword>
复制代码


有关更多详细说明,请参阅 Confluent 网站的使用 SSL 加密和验证身份


您现在可以创建 Kafka 主题并配置 Kafka REST 代理,以连接到您的 Amazon MSK 集群。

创建集成了 Kafka REST 代理的 API

要通过 API Gateway 创建集成了 Kafka REST 代理的 API,请完成以下步骤:


  1. 打开 API Gateway 控制台,然后选择创建 API

  2. 对于 API 类型,选择 REST API

  3. 选择构建

  4. 选择新 API

  5. 对于 API 名称,输入一个名称(例如 amazonmsk-restapi)。

  6. (可选步骤)对于描述,输入简要描述。

  7. 选择创建 API。下一步将是创建子资源。

  8. 资源下,选择父资源项目。

  9. 操作下,选择创建资源。这时将显示新子资源窗格。

  10. 选择配置为代理资源

  11. 对于资源名称,输入 proxy

  12. 对于资源路径,输入 /{proxy+}

  13. 选择启用 API Gateway CORS

  14. 选择创建资源


创建好资源后,将会显示创建方法


15. 对于集成类型,选择 HTTP 代理


16. 对于终端节点 URL,输入一个 HTTP 后端资源 URL(Kafka 客户端 Amazont EC2 实例的 PublicDNS)。


17. 其他字段使用默认设置。


18. 选择保存



  1. 对于 SSL,终端节点 URL 将使用 HTTPS 终端节点。

  2. 选择您刚刚创建的 API。

  3. 操作下选择部署 API

  4. 对于部署阶段,选择新阶段

  5. 对于阶段名称,输入阶段的名称(例如 devtestprod)。

  6. 选择部署



25. 在部署好 API 后记下调用 URL



您的外部 Kafka REST 代理通过 API Gateway 暴露。您将在下一步中使用此 URL。

端到端的过程测试

通过生成并向 Amazon MSK 发送消息进行端到端的过程测试。请执行以下步骤:


  1. 通过 SSH 登录 Kafka 客户端 Amazon EC2 实例。请参见以下代码:


ssh -i "xxxxx.pem" ec2-user@KafkaClientEC2InstancePublicDNS
复制代码


  1. 进入 confluent-5.3.1/bin 目录并启动 kafka-rest 服务。请参见以下代码:


/kafka-rest-start /home/ec2-user/confluent-5.3.1/etc/kafka-rest/kafka-rest.properties
复制代码


如果服务已经启动,您可以使用下面的代码停止服务:


./kafka-rest-stop /home/ec2-user/confluent-5.3.1/etc/kafka-rest/kafka-rest.properties
复制代码


  1. 打开新的终端窗口。

  2. kafka/kafka_2.12-2.2.1/bin 目录中,启动 Kafka 控制台用户。请参见以下代码:


./kafka-console-consumer.sh --bootstrap-server "BootstrapserversConnectString" --topic amazonmskapigwblog --from-beginning
复制代码


您现在可以使用 Postman 生成消息。Postman 是一种用于测试 Web 服务的 HTTP 客户端。


务必在 Kafka 客户端安全组入站规则中允许源自 Postman 请求的 IP 与 TCP 端口。


  1. 标头下,键选择 Content-Type,值选择 application/vnd.kafka.json.v2+json



6. 在正文下,选择原始


7. 选择 JSON。本文输入了以下代码:


{"records":[{"value":{"deviceid": "AppleWatch4","heartrate": "72","timestamp":"2019-10-07 12:46:13"}}]}
复制代码



以下屏幕截图显示了从 API Gateway Kafka REST 终端节点发送到 Kafka 消费者的消息。


结论

本文演示了如何轻松使用 API Gateway 设置适用于 Amazon MSK 的 REST API 终端节点。此解决方案可帮助您从任何 IoT 设备或利用编程语言生成和使用发往 Amazon MSK 的消息,无需依赖原生的 Kafka 协议或客户端。


本文转载自 AWS 技术博客。


原文链接:https://amazonaws-china.com/cn/blogs/china/govern-how-your-clients-interact-with-apache-kafka-using-api-gateway/


2020-04-08 15:33860

评论

发布
暂无评论
发现更多内容

国家下达绿色转型目标!电子签章领域未来的发展趋势如何?

Geek_2a38d5

MobPush推送查询

MobTech袤博科技

Java 开发者 产品动态

【喜讯】数业智能当选“广东省卫生信息网络协会”理事单位

心大陆多智能体

智能体 AI大模型 心理健康 数字心理

RPA技术:基本概念和应用场景的全面指南

八爪鱼采集器︱RPA机器人

RPA 自动化 RPAxAI

SDN网络技术在云计算中的应用

天翼云开发者社区

SDN网络

如何提高研发效能?思码逸 & 信通院告诉你

思码逸研发效能

团队管理 DevOps #研发效能

DPDK简介和原理

天翼云开发者社区

DPDK

RPA实施的四大阶段:一步步的详细指南

八爪鱼采集器︱RPA机器人

RPA 自动化 机器人 RPAxAI

关于 TiDB 升级后结果不一致问题

TiDB 社区干货传送门

管理与运维 故障排查/诊断 新版本/特性解读 应用适配 6.x 实践

2024即刻职达人才生态合作大会于珠海横琴成功召开,共话数智时代人力资源新趋势

新消费日报

IPQ5332 vs. IPQ4019: The Best WiFi Solution for Oil and Gas Industries

wallyslilly

IPQ4019 IPQ5332

聊聊TiCDC

TiDB 社区干货传送门

7.x 实践

金融企业区域集中库的设计构想和测试验证

TiDB 社区干货传送门

TiKV Raft 快照全流程丨TiKV 源码解读(二十二)

TiDB 社区干货传送门

扩容过程中 PD 生成调度的原理及常见问题

TiDB 社区干货传送门

监控 故障排查/诊断 扩/缩容 7.x 实践

MobPush扩展业务功能设置

MobTech袤博科技

开发者 产品动态

利用API返回值实现商品信息的自动化更新

技术冰糖葫芦

API Explorer API 测试 API 策略 pinduoduo API

杭州百腾教育科技 TiDB 6.5 to 7.5 升级记录

TiDB 社区干货传送门

版本升级 7.x 实践

从Oracle到TiDB,全链路数据迁移平台核心能力和杭州银行迁移实践

TiDB 社区干货传送门

生成式AI已融入你的生活和工作了吗?

天津汇柏科技有限公司

人工智能 生成式AI 生成式 AI 应用

《 黑神话 · 悟空》视觉震撼背后的技术力量:如何用云桌面加速 CG 视觉创作 !

Finovy Cloud

游戏开发 游戏 黑神话悟空 黑神话

Titan 引擎:通过从 LSM-Tree 中分离大值,实现 6 倍的写入性能的提升

TiDB 社区干货传送门

火山引擎VeDI实验平台助推企业量化决策能力升级

字节跳动数据平台

大数据 A/B 测试 对比实验 数字化增长

亿玛科技:TiDB 6.1.5 升级到 7.5.1 经验分享

TiDB 社区干货传送门

版本升级 7.x 实践

作业帮 & TiDB 7.5.x 使用经验

TiDB 社区干货传送门

7.x 实践

分布式数据库系统环境的“无感”升级

TiDB 社区干货传送门

TiDB 扩缩容原理及常见问题

TiDB 社区干货传送门

管理与运维 故障排查/诊断 扩/缩容 TiKV 底层架构 7.x 实践

脉讯在线:核心TiDB 从 5.4 升级到 7.1 集群 CDC 性能翻倍

TiDB 社区干货传送门

实践案例 版本升级 性能测评

离奇问题,网络故障恢复后,无法重连到数据库?

中原银行

Java TCP 容器云 HikariCP 网络故障

RPA机器人流程自动化的5个必知关键点

八爪鱼采集器︱RPA机器人

RPA 自动化 RPAxAI

国产RPA软件的优势:企业数字化转型中的关键作用详解

八爪鱼采集器︱RPA机器人

RPA 自动化 RPAxAI

使用 API Gateway 监管客户端与 Apache Kafka 之间的交互_文化 & 方法_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章