使用AWS Lambda读取Kafka(MSK)事件源

时间:2020-10-24 19:34:25

标签: python-3.x amazon-web-services apache-kafka aws-lambda

我正在尝试使用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事件结构

1 个答案:

答案 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的人,也可以对其进行迭代,...