使用Kafka(v2.11-0.10.1.0)-spark-streaming(v-2.0.1-bin-hadoop2.7)。
我有Kafka Producer和Spark-streaming消费者来制作和消费。一切正常,直到我停止消费(大约2分钟)并重新开始。消费者启动和读取数据,绝对完美。但是,我失去了消费者关闭的2分钟数据。
Kafka consumer / server.properties不变。
Kafka制作人的财产:
Properties properties = new Properties();
properties.put("bootstrap.servers", AppCoding.KAFKA_HOST);
properties.put("auto.create.topics.enable", true);
properties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
properties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
properties.put("retries", 1);
logger.info("Initializing Kafka Producer.");
Producer<String, String> producer = new KafkaProducer<>(properties);
producer.send(new ProducerRecord<String, String>(AppCoding.KAFKA_TOPIC, "", documentAsString));
使用Spark-streaming api作为:
SparkConf sparkConf = new SparkConf().setMaster(args[4]).setAppName("Streaming");
// Create the context with 60 seconds batch size
JavaStreamingContext jssc = new JavaStreamingContext(sparkConf, new Duration(60000 * 5));
//input arguments:localhost:2181 sparkS incoming 10 local[*]
Set<String> topicsSet = new HashSet<>(Arrays.asList(args[2].split(";")));
Map<String, String> kafkaParams = new HashMap<>();
kafkaParams.put("metadata.broker.list", args[0]);
//input arguments: localhost:9092 "" incoming 10 local[*]
JavaPairInputDStream<String, String> kafkaStream =
KafkaUtils.createDirectStream(jssc,
String.class,
String.class,
StringDecoder.class,
StringDecoder.class,
kafkaParams,
topicsSet);
另一方面,我一直在使用ActiveMQ。虽然ActiveMQ Consumer可以在关闭时获取数据。 如果存在配置问题,请帮帮我。
答案 0 :(得分:0)
在卡夫卡,消费者实际上与生产者没有直接关系。每个消费者都有一个偏移量,用于跟踪分区中消耗的内容。如果消费者没有跟踪偏移量,Kafka会自动将其偏移量重置为最大值,因为config'auto.offset.reset'的默认值。在您的情况下,当启动全新的消费者时,由于默认策略,它不会看到之前生成的消息。您可以将'auto.offset.reset'设置为最早(对于新消费者)或最小(对于旧消费者)。
答案 1 :(得分:0)
Kafka维持每个记录每个分区的偏移量。当消费者关闭2分钟时,偏移值将存储在新消费者的主题元数据中,并且当消费者在2分钟后重新启动时,它将读取存储在kafka主题中的最后一个偏移量。
我认为您需要检查的是kafka broker data retention policy
如果小于2分钟,数据将丢失,如果不存在与偏移相对应的数据,它将从最新开始读取,因为默认值设置为最新auto.offset.reset=latest
新数据到达。
如果小于2分钟,我建议相应地检查和更改kafka数据保留政策