【问题标题】:Loading issues with angular 4 and both node-rdkafka and kafka-nodeangular 4 以及 node-rdkafka 和 kafka-node 的加载问题
【发布时间】:2017-12-30 12:17:53
【问题描述】:

我对 Web 前端开发非常陌生,在加载 kafka 客户端库时,我有点迷失在 JS/Node/Angular 世界中。我考虑了两个访问我的 kafka 集群的选项:node-rdkafka 和 kafka-node。但是,我不认为我的问题出在他们身上,这似乎是缺乏对 JS 和/或 Node 或其他什么的知识。我将解释实际问题并在最后回到那个概念。

这是我第一次涉足 JS/Node/Angular 世界,所以我对它的了解仍然非常有限,请多多包涵。我开始使用 angular cli (1.2.3) 来构建我的组件、服务等。在我尝试加载 node-rdkafka 之前一切都很好:自述文件指示我使用“require”而不是“import”,但事实并非如此找到了。

通过一些研究,我设法通过将 typings.d.ts 文件更改为如下方式来使“require”正常工作(我认为):

declare var module: NodeModule;
interface NodeModule {
  id: string;
}
declare var require: NodeRequire;

还有 tsconfig.app.json 包括这个:

"types": [
  "node"
]

在 compilerOptions 中。

应用程序编译并且“const kafka = require('node-rdkafka')”开始加载库。但是,它的依赖项之一节点绑定存在一个错误。我发现已经有一个修复,所以我将它的版本更改为最新的提交,只是为了遇到一个已经报告但从未回答的新错误:

https://github.com/TooTallNate/node-bindings/issues/34

我还收到以下警告:

WARNING in ./~/bindings/bindings.js
81:22-40 Critical dependency: the request of a dependency is an expression

WARNING in ./~/bindings/bindings.js
81:43-53 Critical dependency: the request of a dependency is an expression

我尝试查看节点绑定代码,发现它需要“fs”和“路径”,而在我的情况下,这些需要返回“未定义”。由于现在有人使用 node-rdkafka 没有问题,我认为问题可能出在我的环境上,但我在这方面浪费了数小时而没有成功。

然后我尝试使用 kafka-node 代替,但也遇到了问题。首先,它是依赖于“应该”的“BufferMaker”依赖项,它不是由 npm 安装的,我不知道为什么。我使用 --save-dev 手动安装了 npm 所需的版本,然后编译了我自己的代码,但出现了以下警告:

WARNING in ./~/optional/optional.js
6:11-26 Critical dependency: the request of a dependency is an expression

WARNING in ./~/node-zookeeper-client/lib/jute/index.js
771:20-47 Critical dependency: the request of a dependency is an expression

现在我在运行时收到这个错误,互联网上似乎没有其他人有:

Uncaught Error: Cannot find module "."
    at webpackMissingModule (index.js:771)
    at Object.<anonymous> (index.js:771)
    at Object.../../../../node-zookeeper-client/lib/jute/index.js (index.js:781)
    at __webpack_require__ (bootstrap 8ee5092…:54)
    at Object.<anonymous> (index.js:24)
    at Object.../../../../node-zookeeper-client/index.js (index.js:917)
    at __webpack_require__ (bootstrap 8ee5092…:54)
    at Object.<anonymous> (zookeeper.js:3)
    at Object.../../../../kafka-node/lib/zookeeper.js (zookeeper.js:474)
    at __webpack_require__ (bootstrap 8ee5092…:54)

在我看来不可能每个人都有这些问题,因为只有少数人抱怨 node-rdkafka 问题,而我找不到其他人遇到 kafka-node 问题。

所以,除了需要使用 JS 访问 kafka 集群的解决方案之外,我真正的问题是:Angular 4 或 Angular CLI 与使用 require 的代码之间是否存在不兼容?我是否将遗留代码与当前代码或类似的东西混合在一起?

任何指向解决方案的指针都将受到欢迎。提前致谢。

【问题讨论】:

  • 嘿,卡洛斯,你运气好吗?使用 kafka-node 与您完全相同。有什么好的线索吗?干杯!
  • 嗨!我刚刚用我的最新发现回答了这个问题。我很快就会尝试 kafka-rest 路线,我找不到更好(而且仍然便宜)的替代方案。让我知道你的决定!

标签: javascript node.js angular apache-kafka angular-cli


【解决方案1】:

以下是我从开发人员那里收集到的信息:这些库是基于官方 C 实现的包装器。因此,不可能在 Web 客户端中使用它们。但是可以在服务器中使用它们,因为您可以为您的特定平台构建它。如果您可以控制客户端的平台,也可以。

我打算使用Confluent's Kafka REST Proxy 在 REST 接口中公开 kafka 通道。下面是平台中的具体项目:

https://github.com/confluentinc/kafka-rest

还有一个节点客户端:

https://github.com/confluentinc/kafka-rest-node

不过,我还没有尝试过。它似乎只与 linux 兼容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多