spark 0.8版本kafka 保存offset ,实现0数据丢失
最近的项目还是用的老的kafka版本(0.8),用spark 接数据的时候,如果spark 程序意外重启,重启时间内的kafka数据会丢失。我们需要实现最少消费一次,数据重复没有关系。但不能允许丢失数据。 在 Spark Streaming 中消费 Kafka 数据的时候,有两种方式分别是 1)基于 Receiver-based 的 createStream 方法和 2)Direct Approach (No Receivers) 方式的 createDirectStream 方法, 在生产上我们首先用第一种方式,发现性能有很多损耗,而且也不稳定,所以我们后来使用的是第2种方式。我们把kafka 的offset 保存在zookeeper中,实际测试发现zookeeper保存offset效率还不错,下面是具体代码修改记录, 供参考: val topics = Set[String](kafkaInputTopic) val kafkaParams = Map[String, String]( "metadata.broker.list" -> destBrokerHost, "serializer.class" -> "kafka.serializer.StringEncoder", "group.id" -> kafkaGroup) var offsetRanges = Array