首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未使用Avro序列化将数据发送到Kafka

问未使用Avro序列化将数据发送到Kafka
EN

Stack Overflow用户
提问于 2020-11-09 04:35:12
回答 1查看 94关注 0票数 0

我正在尝试用Avro向Kafka发送数据,但“消息”仍然是空的。我尝试手动将模式添加到Kafka,但没有结果。我在我的应用程序日志、模式注册表日志或Kafka的日志中没有看到任何错误。你能告诉我我哪里做错了吗?

代码语言:javascript
复制
import org.apache.kafka.clients.producer.{ KafkaProducer, ProducerRecord, RecordMetadata }
import com.sksamuel.avro4s.{ AvroSchema, Record, RecordFormat, SchemaFor }    

case class User(name: String, age: Int)

val connectConfig: Map[String, Object] =
Map(
  "bootstrap.servers"   -> "localhost:9092",
  "client.id"           -> s"clientID${UUID.randomUUID().toString}",
  "key.serializer"      -> "org.apache.kafka.common.serialization.StringSerializer",
  "value.serializer"    -> "io.confluent.kafka.serializers.KafkaAvroSerializer",
  "schema.registry.url" -> "localhost:8081"
)

implicit val producer = new KafkaProducer[String, Record](connectConfig.asJava)

def sendAvro(msg: DIL): Future[RecordMetadata] = {
    val newUser = User("Joe", 42)
    val schema  = AvroSchema[User]
    implicit val schemaFor = SchemaFor[User]
    val format = RecordFormat[User]

    val record = new ProducerRecord[String, Record]("kafkaLogTopic", format.to(newUser))
    producer.send(record)
}
EN

回答 1

Stack Overflow用户

发布于 2020-11-09 05:40:01

Kafka批量发送数据,您的单条记录小于默认批量。

使用.send(data).get()或producer.flush()立即等待发送一条记录。

否则,您应该在scala.sys.ShutdownHookThread上定义一个线程来刷新生产者

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64742769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档