1

我正在尝试将数据(有效负载)从 BitBucket 发布到我的 Kafka 实例,以防发生任何 BitBucket 事件(Pushed例如PR评论ForkedPR creatingAdditionModificationDeletion

所以,我已经设置了 Kafka rest-proxy,但我无法将数据从 BitBucket 发送到 Kafka,因为使用Kafka REST 代理Content-Type发布数据所需的是,并且 BitBucket 的有效负载的标头设置为(我使用的是默认的 BitBucket webhook在级别配置)。application/vnd.kafka.json.v2+jsonapplication/jsonRepository

我在存储库级别配置了 Webhook 是这样的: 在此处输入图像描述

这是从 BitBucket 的 Webhook 触发的请求:

在此处输入图像描述

我从 Kafka 的 REST 代理得到的响应是这样的:

在此处输入图像描述

我考虑过以下解决方案:

  1. 我可以编写一个简单的 Web 服务器,充当两个系统(BitBucket 和 Kafka)之间的中介。服务器可以充当中间代理,从 BitBucket 的 webhook 获取传入请求,并Kafka REST proxy使用适当的标头 ( application/vnd.kafka.json.v2+json) 将其发布到。

    该解决方案有效,但缺点是维护另一台服务器(由我编写)。此外,由于 BitBucket 开始频繁触发 webhook(高峰时段每秒 100 次,因为我们只有一个 BitBucket 实例并且我们有大约 3500 名开发人员) ,因此它可能会遇到可伸缩性问题。

  2. 我可以使用一个 BitBucket 插件,它可以作为 awebhook并且允许我动态配置和更改标头。这是我正在努力实现的解决方案。也不需要维护额外的服务器。

是否有一个 BitBucket 插件,我可以从市场上安装它,它可以让我在触发 webhook 时配置标头

PS - 很抱歉写了这么长的问题。这两个解决方案只是我的想法。如果有更好的解决方案将 BitBucket 与 Kafka 集成,我不会感到惊讶。另外,如果问题不清楚,请告诉我。在这种情况下,我会尝试以不同的方式澄清我的问题。

谢谢

4

1 回答 1

0

您可以使用Pipedream接受来自 Bitbucket 的 webhook 请求,将Content-Type标头修改为application/vnd.kafka.json.v2+json,并将请求转发到您的 Kafka REST 代理。在 Pipedream 上运行这样的管道是免费的。

我创建了一个示例管道,向您展示了它是如何工作的。它接收从 Bitbucket 发送的 HTTP 有效负载$event.body——并使用一些 Node.js 代码将请求转发到另一个 HTTP 端点。

在我的例子中,我刚刚添加了一个 RequestBin URL,这样您就可以看到在某处发布的正文和标头 — 查看我在此处发送的示例请求。展开该请求的标头部分,并注意Content-Type标头已正确设置为application/vnd.kafka.json.v2+json.

如果您对上面的管道进行 fork(只需单击右上角的 Fork 按钮),它应该会生成一个特定于您的管道的自定义 URL。将该 URL 添加为与您的存储库相关联的新 Bitbucket Webhook URL,您应该会开始看到新事件的出现。

这假设您的 Kafka REST 代理 URL 是可公开访问的。Pipedream 管道的所有代码都是公开的,因此如果您想保持 Kafka REST 代理端点私有,您可以创建一个环境变量并在 Node.js 代码中引用它,将 RequestBin URL 替换为该环境变量的值。

例如,我可能会创建一个名为KAFKA_REST_ENDPOINT并替换的环境变量:

url: 'https://entygbild98b.x.pipedream.net'

url: process.env.KAFKA_REST_ENDPOINT

让我知道这是否有帮助或您有任何其他问题。

于 2019-06-14T21:18:59.173 回答