【问题标题】:Read Kafka topic tail in Spark在 Spark 中阅读 Kafka 主题尾部
【发布时间】:2020-12-16 08:44:12
【问题描述】:

我需要订阅Kafka主题latestoffset,读取一些最新记录,打印出来完成。我怎样才能在 Spark 中做到这一点?我想我可以做这样的事情

sqlContext
    .read
    .format("kafka")
    .option("kafka.bootstrap.servers", "192.168.1.1:9092,...")
    .option("subscribe", "myTopic")
    .option("startingOffsets", "latest")
    .filter($"someField" === "someValue")
    .take(10)
    .show

【问题讨论】:

    标签: apache-spark apache-kafka kafka-consumer-api


    【解决方案1】:

    您需要提前知道要从 Kafka 消费哪些分区中的哪些偏移量。如果您有这些信息,您可以执行以下操作:

    // Subscribe to multiple topics, specifying explicit Kafka offsets
    val df = spark
      .read
      .format("kafka")
      .option("kafka.bootstrap.servers", "192.168.1.1:9092,...")
      .option("subscribe", "myTopic")
      .option("startingOffsets", """{"myTopic":{"0":20,"1":20}}""")
      .option("endingOffsets", """{"myTopic":{"0":25,"1":25}}""")
      .load()
    df.selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)")
      .as[(String, String)]
      .filter(...)
    

    startingOffsetsendingOffsets 的更多详细信息请参见 Kafka + Spark Integration Guide

    【讨论】:

    • 不,我没有任何关于偏移的信息。我只想从所有分区中的latest 中读取n
    • 好的,但请注意文档中的以下注释:“对于批量查询,不允许使用 latest(隐式或在 json 中使用 -1)。”
    猜你喜欢
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 2016-10-27
    • 2023-03-19
    • 2018-01-19
    • 1970-01-01
    相关资源
    最近更新 更多