我将数据流式化为Kafka主题。我有三个发送到主题的值。 数据类型为String的所有内容。我想对数据二进制文件进行编码,然后将其发送给主题。
我使用Spark版本2.3.2
但是,我在整个主题中相对较新,希望您能为我提供帮助。
我有一个键和值序列化器
val stringSerializer = "org.apache.kafka.serialization.StringSerializer"
val kafkaAvroSerializer = "org.apache.kafka.serialization.KafkaAvro"
我的课看起来像这样:
class SenderKafka [Key, Infos, DataOutput](address: Seq[InetSocketAddress], topic: String, prot: String, keyToString: ((Key, Infos, DataOutput) => (String, String)) with Serializable)
extends (Iterator[(Key, Infos, Worked[DataOutput])] => Unit) {
def apply(iter: Iterator[(Key, Infos, Worked[DataOutput])]): Unit = {
val streamOutput = producer(params(address, prot))
iter.foreach {
tuple =>
val (key, Infos, Worked(dataOutput, _)) = tuple
val (keyString, dataOutputString) = keyToString(key, Infos, dataOutput)
streamOutput.send(new ProducerRecord(topic, keyString, dataOutputString))
}
streamOutput.flush()
streamOutput.close()
}
}
这是我的问题:
是否可以将架构另存为.avsc文件在资源文件夹中? (src / main / resources)?为了避免先使用架构注册表?
我有一种可以对数据进行编码的方法,但是数据/模式需要具有这些数据类型:
在Encoder中,我使用EncoderFactory(binaryEncoder),创建一个writer(GenericRecord),然后将数据写入ByteArray(java.io.ByteArrayOutputStream)
我可以替换迭代器吗?