可靠地使用DirectKafkaAPI

时间:2016-10-21 01:06:05

标签: apache-kafka spark-streaming

我很想开发一个基于directkafkaAPI的可靠的streamig应用程序。我将有一个生产者和另一个消费者......我想知道在我的消费者中实现可靠性的最佳方法是什么?我可以雇用两个解决方案..

  1. 增加Kafka中邮件的保留时间
  2. 使用writeahead日志
  3. 我对directkafka API中writeahead日志的使用感到困惑,因为没有接收器......但在文档中指出..

    "完全一次语义:第一种方法使用Kafka的高级API在Zookeeper中存储消耗的偏移量。传统上,这是从Kafka使用数据的方式。虽然这种方法(与预写日志结合使用)可以确保零数据丢失(即至少一次语义),但某些记录在某些故障下可能会被消耗两次的可能性很小。 "

    所以我想知道什么是最好的方法..如果在kafka中增加消息的TTL就足够了,或者我还必须启用提前写日志..

    我想如果我避免上述其中一项是好的做法,因为备份数据(保留的消息,检查点文件)可能会丢失,然后恢复可能会出现故障..

1 个答案:

答案 0 :(得分:0)

直接方法消除了重复数据问题,因为no receiver,因此不需要Write Ahead Logs。只要您有足够的Kafka retention,就可以从Kafka恢复消息。

此外,Direct方法默认支持exactly-once消息传递语义,它不使用Zookeeper。 Spark Streaming在其检查点内跟踪偏移量。