Conflunet Kafka 5.0.0已安装在公共IP为54.XX.XX.XX的AWS EC2上 在EC2机器上使用0.0.0.0打开端口9092
在/etc/kafka/server.properties中,我已经做广告了。listeners= PLAINTEXT://54.XX.XX.XX:9092以及listeners = PLAINTEXT://0.0.0.0:9092 在/etc/kafka/producer.properties中,我有bootstrap.servers = 0.0.0.0:9092
本地文件iotstatesboto.py的编写如下,它具有融合的生产者代码:
from confluent_kafka import Producer
import json
broker = '54.XX.XX.XX'
topic = 'mytopic'
def delivery_report(err, msg):
if err is not None:
print('Message delivery failed: {}'.format(err))
else:
print('Message delivered to {}'.format(msg.topic()))
def lambda_handler(event, context):
p = Producer({'bootstrap.servers': broker})
message = json.dumps(event)
print(message)
p.produce(topic, message.encode('utf-8'), callback=delivery_report)
return {
'message' : message
}
zip软件包是在本地制作的,如下所示:
pip install confluent_kafka has been done in the same directory
zip -r iotstatesboto.zip iotstatesboto.py confluent*
此zip文件已上传到Lambda函数。 然后,当“测试”功能发送虚拟消息时,就会出现以下错误
第一:
{
"errorMessage": "Unable to import module 'iotstatesboto'"
}
还有一个为:
Unable to import module 'iotstatesboto': No module named 'confluent_kafka.cimpl'
我已将处理程序名称设置为“ iotstatesboto.lambda_handler”
有什么线索可以使步骤从lambda函数中获得生产者以在EC2上写入kakfa流吗?
答案 0 :(得分:0)
使用AWS Lambda时,您必须手动提供所有库,即将它们添加到用于lambda函数代码的zip中。您还必须添加所有共享库(如果有)。
在这种情况下,AWS Lambda为您提供了python环境,该环境由Python标准库+ Boto3组成,因此那里没有其他库。