我正在使用Kafka (Integration guide)的结构化流媒体源,如上所述,它不会提交任何偏移量。
我的目标之一是监控它(检查它是否落后等)。即使它没有提交偏移量,它也会通过不时查询kafka并检查哪个是下一个要处理的来处理它们。根据文档,偏移量被写入HDFS,因此如果失败可以恢复,但问题是:
它们存放在哪里? 有没有任何方法可以监控kafka消耗(来自程序外部;所以kafka cli或类似的,每个记录的偏移量不适合用例)如果它没有提交偏移量的火花传播(结构化) ?
干杯
答案 0 :(得分:3)
kafka的结构化流式传输将偏移量保存到结构下面的HDFS。
示例checkpointLocation设置如下。
.writeStream.
.....
option("checkpointLocation", "/tmp/checkPoint")
.....
在这种情况下,kafka的结构化流式传输保存在路径
之下/tmp/checkPoint/offsets/$'batchid'
保存的文件包含以下格式。
v1
{"batchWatermarkMs":0,"batchTimestampMs":$'timestamp',"conf":{"spark.sql.shuffle.partitions":"200"}}
{"Topic1WithPartiton1":{"0":$'OffsetforTopic1ForPartition0'},"Topic2WithPartiton2":{"1":$'OffsetforTopic2ForPartition1',"0":$'OffsetforTopic2ForPartition1'}}
例如。
v1
{"batchWatermarkMs":0,"batchTimestampMs":1505718000115,"conf":{"spark.sql.shuffle.partitions":"200"}}
{"Topic1WithPartiton1":{"0":21482917},"Topic2WithPartiton2":{"1":103557997,"0":103547910}}
所以,我认为对于监控偏移滞后,它需要开发具有以下功能的自定义工具。
这样,现有的偏移滞后监控工具可以监控结构化流的kafka偏移滞后。
答案 1 :(得分:0)
方法1:
如果已配置checkpointLocation
(HDFS / S3等),请转到路径,您将找到两个目录offsets
和commits
。偏移量保留当前偏移量,而提交具有最后提交的偏移量。您可以导航到commits目录并打开最新的修改文件,在其中可以找到最后的提交偏移量。虽然offsets目录中的最新文件包含消耗的offsets信息。
方法2: 您还可以使用以下配置来监视它们:
class CustomStreamingQueryListener extends StreamingQueryListener with AppLogging {
override def onQueryStarted(event: StreamingQueryListener.QueryStartedEvent): Unit = {
logDebug(s"Started query with id : ${event.id}," +
s" name: ${event.name},runId : ${event.runId}")
}
override def onQueryProgress(event: StreamingQueryListener.QueryProgressEvent): Unit = {
val progress = event.progress
logDebug(s"Streaming query made progress: ${progress.prettyJson}")
}
override def onQueryTerminated(event: StreamingQueryListener.QueryTerminatedEvent): Unit = {
logDebug(s"Stream exited due to exception : ${event.exception},id : ${event.id}, " +
s"runId: ${event.runId}")
}
}
并将其添加到您的流配置中。
spark.streams.addListener(new CustomStreamingQueryListener())
答案 2 :(得分:-1)
很少有事情需要注意:
监控:可以在Spark作业的Streaming选项卡中找到现成的监控。您可以看到正在处理的当前批次是什么,以及有多少人在队列中检查延迟。
检查主题的最大和最小偏移量:您可以使用cli来检查这些内容。可以在kafka经纪人所在的服务器下面使用:
kafka-run-class \
kafka.tools.GetOffsetShell \
--broker-list your_broker1:port,your_broker2:port,your_broker3:port \
--topic your_topic \
--time -2
如果您与Grafana
集成,可以获得更详细的信息