Aws lambda 如何使用AWS中的nodejs Lambda作为生产者向MSK主题发送消息,而不创建EC2客户机服务器?

Aws lambda 如何使用AWS中的nodejs Lambda作为生产者向MSK主题发送消息,而不创建EC2客户机服务器?,aws-lambda,amazon-kinesis,amazon-kinesis-firehose,aws-msk,kafka-node,Aws Lambda,Amazon Kinesis,Amazon Kinesis Firehose,Aws Msk,Kafka Node,我试图在AWS中创建一个Lambda,作为MSK主题的制作人。所有的AWS文档都说要创建一个新的EC2实例,但是由于我的Lambda在同一个VPC中,我觉得这样应该可以工作。我对此非常陌生,我注意到我的log语句从未在producer.on函数中出现。 我正在使用nodejs和kafka节点模块。代码可以在下面找到 本质上,我只是想知道是否有人知道如何做到这一点,以及为什么当我通过Lambda运行测试时,producer.on函数从未被命中?这只是一些测试代码,看看我是否可以得到它发送,但如果任

我试图在AWS中创建一个Lambda,作为MSK主题的制作人。所有的AWS文档都说要创建一个新的EC2实例,但是由于我的Lambda在同一个VPC中,我觉得这样应该可以工作。我对此非常陌生,我注意到我的log语句从未在producer.on函数中出现。 我正在使用nodejs和kafka节点模块。代码可以在下面找到

本质上,我只是想知道是否有人知道如何做到这一点,以及为什么当我通过Lambda运行测试时,producer.on函数从未被命中?这只是一些测试代码,看看我是否可以得到它发送,但如果任何更多的数据需要帮助,请让我知道,并提前感谢

exports.handler = async (event, context,callback) => {

const kafka = require('kafka-node');
const bp = require('body-parser');

const kafka_topic = 'MyTopic';
const Producer = kafka.Producer;
var KeyedMessage = kafka.KeyedMessage;
const Client = kafka.Client;
const client = new kafka.KafkaClient({kafkaHost: 'myhost:9094'});

console.log('client :: '+JSON.stringify(client));

const producer = new Producer(client);
console.log('about to hit producer code');

producer.on('ready', function() {
  console.log('Hello there!')
  let message = 'my message';
  let keyedMessage = new KeyedMessage('keyed', 'me keyed message');
  
    producer.send([
    { topic: kafka_topic, partition: 0, messages: [message, keyedMessage], attributes: 0 }
  ], function (err, result) {
    console.log(err || result);
    process.exit();
  });
});

producer.on('error', function (err) {
  console.log('error', err);
});
}
return "success";

您需要的是能够使用RESTAPI在MSK集群上生成消息。为什么不为MSK as设置一个REST代理,然后调用此API向MSK生成消息。

您需要的是能够使用REST API在MSK群集上生成消息。为什么不为MSK as设置一个REST代理,然后调用此API向MSK生成消息。

OK:您已经设置好了,您想在Javascript中创建一个Kafka。。。您希望使用AWS lambda实现生产者,而不是使用成熟的AWS EC2虚拟机。对的问:上面的NodeJS代码具体部署在哪里?你的AWS lambda,对吗?问:你到底是如何试图引用它的?你所有的假设都是正确的。Lambda位于Kinesis数据消防软管中,在中作为数据流调用。所以它应该点击lambda并将数据发送到MSK。这有意义吗?感谢您的澄清:)是的,您应该能够使用AWS lambda实现NodeJS/Kafka生产者。但不,我不熟悉“运动数据消防水带”。所以我不知道为什么你的lambda没有被调用。对不起,我帮不上什么忙了……嘿,别担心,谢谢你的登记。这个澄清可能会帮助别人帮我弄明白。非常感谢您花时间提供帮助。AFAIK Kinesis数据流可以自动向S3、红移、Elasticsearch、Datadog、MongoDB、New Relic、Splunk和HTTP端点提供数据流。不是直接的MSK。所以我假设您将此函数作为HTTP端点编写?如果是这样的话,您可能需要仔细检查编写充当Kinesis数据流接收器的HTTP端点的要求:好的:您已经设置好了,您想要在Javascript中创建一个Kafka。。。您希望使用AWS lambda实现生产者,而不是使用成熟的AWS EC2虚拟机。对的问:上面的NodeJS代码具体部署在哪里?你的AWS lambda,对吗?问:你到底是如何试图引用它的?你所有的假设都是正确的。Lambda位于Kinesis数据消防软管中,在中作为数据流调用。所以它应该点击lambda并将数据发送到MSK。这有意义吗?感谢您的澄清:)是的,您应该能够使用AWS lambda实现NodeJS/Kafka生产者。但不,我不熟悉“运动数据消防水带”。所以我不知道为什么你的lambda没有被调用。对不起,我帮不上什么忙了……嘿,别担心,谢谢你的登记。这个澄清可能会帮助别人帮我弄明白。非常感谢您花时间提供帮助。AFAIK Kinesis数据流可以自动向S3、红移、Elasticsearch、Datadog、MongoDB、New Relic、Splunk和HTTP端点提供数据流。不是直接的MSK。所以我假设您将此函数作为HTTP端点编写?如果是这样,您可能需要仔细检查写入充当Kinesis数据流接收器的HTTP端点的要求: