您好我已经为Kinesis流制作了一个AWS Lambda函数,批量大小为100&我试图在多线程环境中执行它,但问题是在多线程环境中,与单线程相比,它工作得很慢..就像我可以分享你的数字:对于512 MB,60秒超时,Lambda函数在684毫秒内执行955条记录& 435毫秒的1031条记录&对于多线程,它在878808 ms内执行430条记录.相同内存的893862 ms中的433条记录(即512 MB和60秒超时)
以下是我的Lambda函数代码,它以多线程行为执行:
public String myHandler(final KinesisEvent kinesisEvent, final Context context) {
Thread thread = new Thread(new Runnable(){
//@Override
public void run() {
int singleRecord=0;
long starttime=System.currentTimeMillis();
//LambdaLogger lambdaLogger=context.getLogger();
for(KinesisEventRecord rec : kinesisEvent.getRecords())
{
singleRecord=0;
System.out.println("Kinesis Record inside is:"+new String(rec.getKinesis().getData().array()));
//count++;
singleRecord++;
// System.out.println(new String(rec.getKinesis().getData().array()));
}
count=count+singleRecord;
long endtime=System.currentTimeMillis();
long totaltime = endtime-starttime;
time=time+totaltime;
System.out.println("Time required to execute single Lambda function for "+singleRecord+" records is"+" :: "+totaltime+" milliseconds");
System.out.println("Total time required to execute Lambda function for "+count+" records is"+" :: "+time+" milliseconds");
}
});
thread.start();
return null;
} //end of handler method
Lambda函数在多线程环境中执行速度慢吗?我想知道这个多线程Lambda函数处理速度慢的原因是什么?如果我希望这个函数比单线程函数更快地工作,那么我应该在这段代码中做些什么改变?
最佳答案 另外两个选择:
>让您的初始Lambda使用SDK异步启动实际工作的其他lambda(扇出)
>将Lambda调度与调度偏移和长时间超时配合使用,以便同时运行多个lambda.