Using Timestamps on Streams and Topics

Provides a code example for using timestamps on HPE Ezmeral Data Fabric Streams streams and topics.

Passing Timestamp Value

The timestamp value can be passed as part of the ProducerRecord, for example:

ProducerRecord<String, String> producerRecord = 
        new ProducerRecord<String, String>(topicName, partition, timestamp, key, value);
NOTE
The timestamp value is retained if the timestamp type is createtime. If the timestamp type is logappendtime, then the timestamp value is ignored and instead the server timestamp is used.

Retrieving Timestamp Type

This example sets and retrieves the timestamp type. The following code example performs the following:
  • Creates a stream with a default timestamp type of LogAppendTime.
  • Creates a topic with a specific timestamp type of CreateTime.
  • Retrieves the topics's timestamp type.
// Create stream with default timestamp type as "LogAppendTime"
// Create a topic with timestamp type as "CreateTime"
        Configuration conf = new Configuration();
        Admin streamAdmin = Streams.newAdmin(conf);

// Create a stream
        StreamDescriptor sDesc = Streams.newStreamDescriptor();
        sDesc.setDefaultTimestampType(TimestampType.LOG_APPEND_TIME);
        streamAdmin.createStream(streamName, sDesc);
        
// Create a topic
        TopicDescriptor tDesc = Streams.newTopicDescriptor();
        tDesc.setTimestampType(TimestampType.CREATE_TIME);
        streamAdmin.createTopic(streamName, topicName, tDesc);
        
// Get topic timestamp type
        TopicDescriptor rDesc = streamAdmin.getTopicDescriptor(streamName, topicName);
        System.out.println(rDesc.getTimestampType().name);