我正在使用Spark结构化流传输将记录发送到kafka主题。 kafka主题是使用配置-message.timestamp.type=CreateTime
这样做是为了使目标Kafka主题记录具有与原始记录相同的时间戳。
我的kafka流式代码:
kafkaRecords.selectExpr("CAST(key AS STRING)", "CAST(value AS BINARY)","CAST(timestamp AS TIMESTAMP)")
.write
.format("kafka")
.option("kafka.bootstrap.servers","IP Of kafka")
.option("topic",targetTopic)
.option("kafka.max.in.flight.requests.per.connection", "1")
.option("checkpointLocation",checkPointLocation)
.save()
但是,这不会保留原始的时间戳,即2018/11/04,而是时间戳反映了最新的日期2018/11/9。
另一方面,只是为了确认kafka配置是否正常工作,当我显式创建一个带有时间戳的Kafka Producer和Producer记录并将其发送时,原始时间戳会保留下来。
如何在Kafka结构化流媒体中获得相同的行为。
答案 0 :(得分:0)
主题的public interface HostRepository extends Neo4jRepository<Host, Long> {
@Query("MATCH p=(parent:Host)<-[r:`28H`]-(child:Host) WHERE parent.Host_Name = \"pserver_01\" RETURN p, type(r)")
Collection<Host> getAllHosts();
}
配置将意味着创建记录时(即获得记录的时间)。
不清楚您在哪里读取数据并查看时间戳,如果您正在运行生产者代码“今天”,那么这就是他们获得的时间,而不是之前。
如果您想要过去的时间戳,则实际上需要使用包含时间戳参数的构造函数使CreateTime
包含该时间戳,但Spark不会公开它。
如果您在执行操作时仅将时间戳记放入有效负载值中,那么这就是您要进行分析的时间,可能不是ProducerRecord
如果您想将数据从一个主题准确地复制到另一个主题,Kafka使用MirrorMaker来完成。然后,您只需要配置文件,而无需编写和部署Spark代码