Kafka ProducerRecord中timestamp的作用是什么?是否会随消息发送到Broker?
我们可以在Kafka ProducerRecord的构造方法中指定timestamp参数,对应构造方法签名如下:
public ProducerRecord(String topic, Integer partition, Long timestamp, K key, V value, Iterable<Header> headers)
1. timestamp参数的设计用途
- 业务时间标记:支持业务自定义消息的事件发生时间,无需额外将时间字段写入消息体,也可用于计算消息生产到消费的全链路延迟,做链路耗时监控。
- 日志清理规则依据:Kafka基于时间的日志过期删除策略,默认会以消息自带的timestamp为判断基准,决定该消息是否达到留存周期需要被清理,比直接用Broker接收时间更符合业务场景的清理需求。
- 流处理时间语义支撑:Kafka Streams、Flink等流处理组件可以直接读取该timestamp作为事件时间(Event Time)的默认来源,天然支持窗口计算、乱序消息处理等流处理核心逻辑,降低开发成本。
2. 是否会随消息传输到Kafka Broker
该timestamp属于消息的官方元数据字段,会和key、value、消息头等内容一起序列化后发送到Broker,默认会被持久化到分区日志中,消费者拉取消息时也可以直接读取到该字段值。
需要注意的是,如果Broker侧配置了message.timestamp.type=LogAppendTime,那么Broker会在消息写入日志时用自身的本地时间覆盖生产者传递的timestamp值,最终持久化和返回给消费者的是Broker的写入时间。
内容的提问来源于stack exchange,提问作者Lahiru Chandima
相关产品推荐
相关产品推荐

