Java ile yazılmış ve Spark 2.1 kullanan bir Spark akış uygulamasına sahibim. Kafka'nın mesajlarını okumak için KafkaUtils.createDirectStream
kullanıyorum. Kafka mesajları için kryo encoder/decoder kullanıyorum. Bunu Kafka özelliklerinde belirttim-> key.deserializer, value.deserializer, key.serializer, value.deserializer
Spark, mesajları bir mikro yığında çektiğinde, kryo dekoderi kullanılarak mesajlar başarıyla çözülür. Ancak, Spark uygulayıcısının kafka'dan okunan her mesajın kodunu çözmek için yeni bir kryo kod çözücü örneği oluşturduğunu fark ettim. Kod çözücü kurucusunun içindeki günlükleri
içine koyarak kontrol ettim. Bu bana garip geliyor. Her mesaj ve her parti için aynı kod çözücü örneği kullanılmamalıdır mı?Kafka Direct Stream her mesaj için neden yeni bir kod çözücü yaratıyor?
Kod ben kafka dan okuyorum burada:
biz Kıvılcım içten Kafka veri getirir nasıl görmek istiyorsanızJavaInputDStream<ConsumerRecord<String, Class1>> consumerRecords = KafkaUtils.createDirectStream(
jssc,
LocationStrategies.PreferConsistent(),
ConsumerStrategies.<String, Class1>Subscribe(topics, kafkaParams));
JavaPairDStream<String, Class1> converted = consumerRecords.mapToPair(consRecord -> {
return new Tuple2<String, Class1>(consRecord.key(), consRecord.value());
});
Çok iyi araştırılmış! #impressed –
@Yuval: Kafka 0.10.x kullanıyorum. Spark, önbellek anahtarının tüketici kimliği, konu kimliği, bölüm kimliği ile tanımlandığı önbelleğe alınan kafka tüketicilerini (yürütücü başına) kullanır. Kafka bölmesi başına bir kod çözücüye sahip olmak ya da Spark'in mesajları paralel olarak nasıl çözmesi mantıklıdır. Beklediğim şey, önbelleğe alınmış bir tüketici içindeki bölüm başına bir kez yeni bir kod çözücü oluşturulmalı ve bu kadar! Bu problemi hafif bir yük altında görmüyorum ama sadece saniyeler içinde 1000 mesaj ilettiğimde. Muhtemelen bir "GC" döngüsüne koşuyorum. KafkaRDD sınıfında günlüğün nasıl etkinleştirileceğine dair bir fikrin var mı? – scorpio
@scorpio Kafka 0.10.x, bir kod çözücü gerektirmez. Altta yatan 'ConsumerRecord' değerini döndürür ve bununla ne yapacağınızı seçersiniz. Belki bir 'harita' içinde bir kod çözücü örneği oluşturuyor musunuz? –