kafka--Struct Streaming--console案例入门

69 篇文章 8 订阅

需求

  • Structured Streaming作为消费者读取kafka生产的内容
  • 输出内容到控制台

案例

启动kafka生产者

kafka-console-producer.sh \
--broker-list mypc01:9092,mypc02:9092,mypc03:9092 \
--topic pet
import org.apache.spark.sql.streaming.OutputMode
import org.apache.spark.sql.{DataFrame, SparkSession}

object kafkaSource extends App {
//构建spark Session
  private val session: SparkSession = SparkSession.builder().master("local[2]").appName("test")
    .getOrCreate()
  //读取kafka上内容,指定format为kafka,以及订阅主题,服务器地址
  private val df: DataFrame = session.readStream.format("kafka")
    .option("kafka.bootstrap.servers","mypc01:9092,mypc02:9092,mypc03:9092")
    .option("subscribe","pet")
    //可选项,设置offset
    .option("staringOffsets", "earliest")
    // 可选项,设置消费者组
    .option("kafka.consumer.commit.groupid", "test1")
    .load()

//输出数据到控制台
//不可以用show方法
  df.writeStream
    .outputMode(OutputMode.Update())
    .format("console")
    .start()
    .awaitTermination()
}

之后利用生产者生产数据,即可在控制台看到输出,示例如下

因为没有key,所以为null,值的类型为二进制,需要处理一下才能看到

Batch: 4
-------------------------------------------
+----+-------+-----+---------+------+--------------------+-------------+
| key|  value|topic|partition|offset|           timestamp|timestampType|
+----+-------+-----+---------+------+--------------------+-------------+
|null|[64 64]|  pet|        2|   399|2020-12-09 17:33:...|            0|
|null|[66 66]|  pet|        0|   371|2020-12-09 17:33:...|            0|
|null|[65 65]|  pet|        1|   388|2020-12-09 17:33:...|            0|
+----+-------+-----+---------+------+--------------------+-------------+

在上面代码的输出前加一句,解析二进制内容为字符串

 private val df1: DataFrame = df.selectExpr("cast(value as String)")

输出结果示例

|value|
+-----+
|   bb|
|   cc|
+-----+

因为只选择了1列,所以只会输出一列,也可以多选

private val df1: DataFrame = df.selectExpr("cast(value as String)","offset")

结果示例如下

+-----+------+
|value|offset|
+-----+------+
|   aa|   404|
+-----+------+

总结

  • kafka source需要指定format,kafka.bootstrap.servers,以及subscribe属性
  • kafka读取的内容为二进制内容,需要进行解码方便阅读
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值