我很想开发一个基于directkafkaAPI的可靠的streamig应用程序。我将有一个生产者和另一个消费者......我想知道在我的消费者中实现可靠性的最佳方法是什么?我可以雇用两个解决方案..
我对directkafka API中writeahead日志的使用感到困惑,因为没有接收器......但在文档中指出..
"完全一次语义:第一种方法使用Kafka的高级API在Zookeeper中存储消耗的偏移量。传统上,这是从Kafka使用数据的方式。虽然这种方法(与预写日志结合使用)可以确保零数据丢失(即至少一次语义),但某些记录在某些故障下可能会被消耗两次的可能性很小。 "
所以我想知道什么是最好的方法..如果在kafka中增加消息的TTL就足够了,或者我还必须启用提前写日志..
我想如果我避免上述其中一项是好的做法,因为备份数据(保留的消息,检查点文件)可能会丢失,然后恢复可能会出现故障..
答案 0 :(得分:0)
直接方法消除了重复数据问题,因为no receiver
,因此不需要Write Ahead Logs
。只要您有足够的Kafka retention
,就可以从Kafka恢复消息。
此外,Direct方法默认支持exactly-once
消息传递语义,它不使用Zookeeper。 Spark Streaming在其检查点内跟踪偏移量。