in pulsar-client-kafka-compat/pulsar-client-kafka/src/main/java/org/apache/kafka/clients/producer/PulsarKafkaProducer.java [363:391]
private int buildMessage(TypedMessageBuilder<byte[]> builder, ProducerRecord<K, V> record) {
byte[] keyBytes = null;
if (record.key() != null) {
String key = getKey(record.topic(), record.key());
keyBytes = key.getBytes(StandardCharsets.UTF_8);
builder.key(key);
}
if (record.timestamp() != null) {
builder.eventTime(record.timestamp());
}
if (valueSchema instanceof PulsarKafkaSchema) {
((PulsarKafkaSchema<V>) valueSchema).setTopic(record.topic());
}
byte[] value = valueSchema.encode(record.value());
builder.value(value);
if (record.partition() != null) {
// Partition was explicitly set on the record
builder.property(KafkaMessageRouter.PARTITION_ID, record.partition().toString());
} else {
// Get the partition id from the partitioner
int partition = partitioner.partition(record.topic(), record.key(), keyBytes, record.value(), value, cluster);
builder.property(KafkaMessageRouter.PARTITION_ID, Integer.toString(partition));
}
return value.length;
}