spark structured streamming 写出数据到kafka

前言

导包等一些基础的准备问题就不说了,有问题留言。

微信公众号:大数据报文

Main

虽然说的是streamming,但是这里会分别说流处理和批处理。

流处理

val ds = df
//注意这里的as("value")是必须的,因为写入kafka的数据一定要有value,根据实际情况也需要指定key
  .selectExpr(formats($"USERID", $"ADDRESS", $"XQMC").as("value"),lit("data_increment_data.kafka.kafIns.water.t_water.*.*.*").as("key"))
  .writeStream
  .format("kafka")
//注意这里的参数kafka.bootstrap.servers,而不是bootstrap.servers,写成这样会提示没有bootstrap.servers参数
  .option("kafka.bootstrap.servers", "host1:port1,host2:port2")
  .option("topic", "topic1")
  .start()

批处理

//注意事项与流处理一样,只是这里不需要指定outputmode,action由start变成了save()
waterDF.select(formats($"USERID", $"ADDRESS", $"XQMC").as("value"),lit("data_increment_data.kafka.kafIns.water.t_water.*.*.*").as("key"))
                .write
                .format("kafka")
                .option("kafka.bootstrap.servers", "master:9098")
                .option("topic", "water")
                .save()

sink结果

可以看到指定了key和value都写入到指定位置了。

spark structured streamming 写出数据到kafka_第1张图片

错误处理

由于上述,把option("kafka.bootstrap.servers", "master:9098"),错写成option("bootstrap.servers", "master:9098"),导致报错

Caused by: org.apache.kafka.common.config.ConfigException: Missing required configuration "bootstrap.servers" which has no default value。

如果不注意,看到这个问题很奇怪,因为我明明指定了bootstrap.servers了啊,但是其实是指定错了。

总结

有些有头无尾,只写了数据如何sink到kafka并没有说如何接入kafka的数据。下次有机会补上。有问题也可以留言。

你可能感兴趣的:(Spark)