2017-07-04 30 views
0

比方说,有用于执行任务列表[T]一批API。为了完成这项工作,所有的任务都需要推到卡夫卡。有两种方法做到这一点:生产批次消息

1)在卡夫卡 2)推动各个工作T卡夫卡

我相信方法1会更好,因为我没有推推列表作为消息消息发送到单个批次调用的多个时间段。有人能告诉我这种方法是否有害吗?

回答

1

卡夫卡制作人可以在短时间窗口内发送个别信息(特别配置为linger.ms),因此发送单个信息的成本可能比您想象的要低很多。

可能要考虑一个更重要的因素是消费者将如何使用消息。例如,如果消费者无法处理其中一项任务,会发生什么情况?如果消费者只是打电话给一些其他基于批处理的API成功或失败,那么包含任务列表的单个消息将非常合适。另一方面,如果消费者最终必须单独处理任务,那么发送单个消息可能更适合,并且可能会使您无需在消费者中实施某种重试逻辑,因为您可能可以配置Kafka的行为你需要的语义。

+0

非常感谢汤姆:) –

0

从卡夫卡v0.11开始,你也可以使用交易生产者原子发布整批。即您开始交易,然后通过消息发布您的任务消息,最后您提交交易。即使消息可以多批次发送给卡夫卡,只要您的消费者以读取提交模式运行,它们只会在您提交事务后才会对消费者可见。

+0

非常感谢迈克尔:) –

0

选项1是在卡夫卡优选的方法,只要该整批应始终保持在一起。如果将记录列表作为批处理发布,则它们将作为批处理进行存储,它们将(可选)作为批处理进行压缩,从而产生更好的压缩效果,并且由消费者将其作为批处理提取,从而产生更少的提取请求。

如果您发送的单个邮件,那么你将必须给他们一个共同的关键否则它们可能会分散在不同的分区,并可能被发送出去的顺序,或以不同消费者的消费群。