Apache spark “阿帕奇火花与卡夫卡”;正好一次;语义学
我有一个要输出到卡夫卡的数据帧。这可以通过使用卡夫卡制作人手动制作forEach来完成,也可以使用卡夫卡接收器(如果我开始使用Spark结构化流媒体)。Apache spark “阿帕奇火花与卡夫卡”;正好一次;语义学,apache-spark,apache-kafka,Apache Spark,Apache Kafka,我有一个要输出到卡夫卡的数据帧。这可以通过使用卡夫卡制作人手动制作forEach来完成,也可以使用卡夫卡接收器(如果我开始使用Spark结构化流媒体)。 我希望在整个过程中实现一次语义,因此我希望确保不会将相同的消息提交两次 如果我使用Kafka producer,我可以通过Kafka属性启用幂等性,因为我看到这是使用序列号和ProducerId实现的,但我相信在阶段/任务失败的情况下,Spark重试机制可能会在Kafka上创建重复项,例如,如果工作节点失败,整个阶段将重试,并且将是一个全新的生
我希望在整个过程中实现一次语义,因此我希望确保不会将相同的消息提交两次
如果可能,怎么做?卡夫卡不支持一次语义。他们只能保证至少一次。他们只是建议如何避免重复信息。如果您的数据具有唯一密钥,并且存储在数据库或文件系统等中,则可以避免重复消息 例如,将数据放入HBase,每条消息都有一个唯一的键作为HBase行键。当它收到具有相同密钥的消息时,该消息将被覆盖 我希望这篇文章将对您有所帮助:
Kafka producer只支持一次语义:。您所描述的情况不同,是卡夫卡消费者(卡夫卡连接)将数据保存到另一个源中的情况。@L他描述的有点太快了。生产者也可以在重新启动后恰好失败一次。数据库的升级是幂等性,这在这里很有帮助。拥有数据的幂等消费者是一个可行的选择,但我想了解是否有可能在生产者方面保证这一点。根据我链接的Kafka文档,这是可能的(或者,如果使用producerIDs和序列号启用幂等性,则至少代理不会从同一个生产者写入两次消息)。我想了解的是kafka producer api将如何与Spark重试机制一起工作@BluePhantom你能解释一下“生产者在重新启动后也会失败一次”吗?卡夫卡确实支持一次处理。Spark Snapshot甚至进一步提高了保证