@Override public void write(Record<T> record) throws Exception { TypedMessageBuilder<T> msg = pulsarSinkProcessor.newMessage(record); if (record.getKey().isPresent()) { msg.key(record.getKey().get()); } msg.value(record.getValue()); if (!record.getProperties().isEmpty()) { msg.properties(record.getProperties()); } SinkRecord<T> sinkRecord = (SinkRecord<T>) record; if (sinkRecord.getSourceRecord() instanceof PulsarRecord) { PulsarRecord<T> pulsarRecord = (PulsarRecord<T>) sinkRecord.getSourceRecord(); // forward user properties to sink-topic msg.property("__pfn_input_topic__", pulsarRecord.getTopicName().get()) .property("__pfn_input_msg_id__", new String(Base64.getEncoder().encode(pulsarRecord.getMessageId().toByteArray()))); } else { // It is coming from some source Optional<Long> eventTime = sinkRecord.getSourceRecord().getEventTime(); if (eventTime.isPresent()) { msg.eventTime(eventTime.get()); } } pulsarSinkProcessor.sendOutputMessage(msg, record); }