我们有2个生产者和1个消费者,我们使用KCL处理来自kinesis的数据落后24小时。我们如何提高性能。
答案 0 :(得分:0)
很明显,你在消费者中做错了什么。 24小时滞后是Kinesis的杀手,因为在该间隔之后数据将从亚马逊服务器中删除。
为了改善您的体验,您必须做好准备。
如果生产者端的2条记录之间的延迟是7秒,那么处理消费者应用程序的1条记录的时间超过7秒;你不能使用Kinesis。这很明显。但是,如果您的业务需要需要这种方法,您可能需要考虑其他策略。也许在消费者应用程序之外的远程服务器上处理(计算密集型)任务可以帮助您。也许将消费的记录发送到消息传递平台以便在别处处理?但这似乎是一种反模式(即#34;为什么你要使用Kinesis,如果你必须使用另一种消息系统?")。
消费者做得少一些。如果您真的需要花费这么多时间来记录,请尝试并行化消费过程。我将再次使用上一个示例,如果1个记录需要15秒来处理,并且如果在该间隔内收到3个请求;在消费者方面使用或更多3个工作线程。如果您使用的是KCL,则可以使用更多分片来改进并行化。据我所知,每个IEmitter类(实现)都在自己的线程上运行。对于每个分片,都会调用一个新的IEmitter。另外,检查你的哈希(分区)键;这有助于在分片中均匀分发您的记录。
对消费者进行批处理也是一种选择。例如,让我们说你的记录包含" id:1,姓名:John,姓:Doe"," 2,Jason,Will"," 3 ,Mary,Poppin"等等。让我们说你需要将所有这些作为插入写入MySQL。每个插入都很昂贵(每次打开连接,写入,提交,关闭连接)。但是如果您将这些记录写在临时占位符文件上进行批量处理,则可以使用3个值集向MySQL发出1个插入请求。这样可以节省网络开销。
如果您解释您的业务案例,数据模型等,也许我们可以提供更多帮助。
感谢。