|
@@ -1,78 +0,0 @@
|
|
|
-package producer;
|
|
|
-
|
|
|
-import org.apache.kafka.clients.producer.KafkaProducer;
|
|
|
-import org.apache.kafka.clients.producer.ProducerConfig;
|
|
|
-import org.apache.kafka.clients.producer.ProducerRecord;
|
|
|
-
|
|
|
-import java.time.Instant;
|
|
|
-import java.util.Properties;
|
|
|
-
|
|
|
-public class KafkaProducerApp {
|
|
|
-
|
|
|
- public static final String STRING_SERIALIZER = "org.apache.kafka.common.serialization.StringSerializer";
|
|
|
- public static final String TOPIC = "my-topic";
|
|
|
-
|
|
|
- public static void main(String[] args) {
|
|
|
- Properties props = new Properties();
|
|
|
-
|
|
|
- // These are the 3 required properties.
|
|
|
- // 1. Cluster membership: partition leaders, etc
|
|
|
- props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092, BROKER-1:9092, BROKER-2:9093");
|
|
|
-
|
|
|
- // 2. How keys and values are serialized.
|
|
|
- props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, STRING_SERIALIZER);
|
|
|
- props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, STRING_SERIALIZER);
|
|
|
-
|
|
|
- KafkaProducer<String, String> myProducer = new KafkaProducer<String, String>(props);
|
|
|
-
|
|
|
- try {
|
|
|
- for (int i = 0; i < 100; i++) {
|
|
|
- Instant ts = Instant.now();
|
|
|
- Double ss = ts.toEpochMilli() + ts.getNano() / 1E9;
|
|
|
- ProducerRecord myMessage = new ProducerRecord(TOPIC, String.format("%3d : %09.3f", i, ss));
|
|
|
- myProducer.send(myMessage); // Best practice: wrap in try..catch.
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- } finally {
|
|
|
- myProducer.close();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public static void createMessagesExample() {
|
|
|
- // Message with only the required properties.
|
|
|
- ProducerRecord myMessage = new ProducerRecord(
|
|
|
- TOPIC, // Topic to which the record will be sent.
|
|
|
- "My Message 1" // Message content, matching the serializer type for value
|
|
|
- );
|
|
|
-
|
|
|
- // Non-matching type: runtime exception
|
|
|
- // ProducerRecord myBadMessage = new ProducerRecord(TOPIC, 3.14159);
|
|
|
-
|
|
|
- ProducerRecord myPartitionedMessage = new ProducerRecord(
|
|
|
- TOPIC, // String Topic
|
|
|
- 1, // Integer Partition
|
|
|
- "My Message 1" // String Message
|
|
|
- );
|
|
|
-
|
|
|
- ProducerRecord myKeyedMessage = new ProducerRecord(
|
|
|
- TOPIC, // String Topic
|
|
|
- "Course-001", // K key
|
|
|
- "My Message 1" // String Message
|
|
|
- );
|
|
|
-
|
|
|
- // Adding optional properties
|
|
|
- ProducerRecord msg3 = new ProducerRecord(
|
|
|
- TOPIC, // String Topic
|
|
|
- 1, // Integer Partition
|
|
|
- 124535353325L, // Long timestamp, added in Kafka 0.10.
|
|
|
- "Course-001", // K key: basis to determine partitioning strategy. Don't use blank or NULL.
|
|
|
- // Key may contain additional message information, but adds overhead, depends on serializer.
|
|
|
- "My Message 1" // V value
|
|
|
- );
|
|
|
- // The actual TS being send with the message is defined in server.properties:
|
|
|
- // log.message.timestamp.type = [CreateTime, LogAppendTime]
|
|
|
- // - CreateTime: producer-set timestamp is used
|
|
|
- // - LogAppendtime: broker-set to the time when the message is appended to the commit log. Overrides the producet-set one.
|
|
|
- }
|
|
|
-}
|