我正在尝试使用AWS lambda从kafka主题(AWS MSK)中读取值。
从lambda打印时的事件记录如下:
{'eventSource':'aws:kafka','eventSourceArn':'arn:aws:kafka:ap-northeast-1:987654321:cluster / mskcluster / 79y80c66-813a-4f-af0e-4ea47ba107e6','记录':{'Transactions-0':[{'topic':'Transactions','partition':0,'offset':4798,'timestamp':1603565835915,'timestampType':'CREATE_TIME','value':' eyJFdmVudFRpbWUiOiAiMjAyMC0xMC0yNCAxODo1NzoxNS45MTUzMjQiLCAiSVAiOiAiMTgwLjI0MS4xNTkuMjE4IiwgIkFjY291bnROdW1iZXIiOiwiMTQ2ODA4ODYiLCAiVXNlck5hbWUiOi67iQW1iZXIgUm9tYXJvIiwgIkFtb3VudCI6ICI1NTYyIiwgIlRyYW5zYWN0aW9uSUQiOiAiTzI4Qlg3TlBJbWZmSXExWCIsICJDb3VuTHJ5IjogIk9tYW4ifQ =='}]}}
如何提取“主题”和“值”字段?值1是base64编码的。 我收到以下错误:
NameError:名称“记录”未定义
我正在尝试以下代码:
import json
import base64
def lambda_handler(event, context):
print(event)
message = event['records']
payload=base64.b64decode(record["message"]["value"])
print("Decoded payload: " + str(payload))
Sample MSK事件结构
答案 0 :(得分:1)
在您的代码段中,您尝试传递给解码函数的record
变量不存在。遍历记录的一个示例是:
records = event['records']['Transactions-0']
for record in records:
payload=base64.b64decode(record["message"]["value"])
print("Decoded payload: " + str(payload))
每个函数调用每个主题包含多个记录。尽管如果您有多个类似Transactions-1
的人,也可以对其进行迭代,...