2016-04-08 142 views
0

我有一个kinesis流,用于排队任务,比如发送电子邮件。我有一群消费者应该阅读队列,然后发送电子邮件。Kinesis - 消费者集群

在这种情况下,如果消费者从队列中读取一个项目,其他消费者不应读取相同的项目;其他我会发送重复的电子邮件。

我该如何做到这一点?

回答

0

首先,将KCL用于Kinesis消费类应用程序。如您所知,放入流中的记录将位于特定分片中,并且通过使用KCL,您可以确保只有一个消费者节点(在应用程序中)轮询该分片。所以没有双重倾听同一个分片的风险(因此处理相同的记录)。

其次,Kinesis可能是发送交易信息的错误体系结构,比如电子邮件。它可能被复制,甚至没有被处理。这不是一个可靠的队列系统。

例如,流中的每条记录都包含一封电子邮件,但让我们假设发送其中一条记录时出现错误。你会怎么做?你会把这一个记录再次流入,重试吗?你会重试多少次?另外,Kinesis消费者会批量查看流中的记录,因此如果一批记录(ProcessRecordsInput.getRecords)中有一条记录中断,则该批处理(ProcessRecordsInput.getCheckpointer)的检查点可能包含多个项目,包括该记录的损坏记录。因此,应用程序重新启动会使您面临双重处理的风险。

我建议在你的用例中使用基于队列的系统(HornetQ,ActiveMQ等)会更好。

相关问题