Instalasi Apache Kafka
Sebelum membaca artikel ini ada baiknya membaca terlebih dahulu artikel https://enigmacamp.medium.com/mengenal-lebih-dalam-apache-kafka-ec734297e5cc agar EnigmaNians mengetahui dahulu apa itu Apache Kafka.
Lakukan instalasi ini juga ya https://enigmacamp.medium.com/instalasi-java-development-kit-jdk-5a11d8317431
Instalasi Apache Kafka sangatlah mudah teman-teman bisa kunjungi situs resmi nya untuk mendownload https://kafka.apache.org/downloads
Setelah berhasil dan selesai download, silahkan ekstrak file tersebut kemudian pindahkan ditempat yang lebih aman.
Langkah selanjutnya adalah kita akan melakukan konfigurasi beberapa hal pada server kafka dan zookeeper. Untuk melakukan nya adalah buka folder config yang ada dalam folder kafka yang sudah di download tadi, lalu buka file zookeeper.properties dan server.properties.
Silahkan ubah pada dataDir, tempatkan direktori di lokasi yang aman, kenapa ? karena jika seperti saja ketika pc/laptop kita shutdown atau restart maka akan hilang.
Sama hal nya dengan zookeeper.properties, pada server.properties ubah pada bagian log.dirs juga.
Hal terpenting lainnya adalah pada bagian ini :
Ya, broker, jika kita baca pada artikel sebelumnya https://enigmacamp.medium.com/mengenal-lebih-dalam-apache-kafka-ec734297e5cc
Selanjutnya kita akan menjalakan server kafka nya, sedikit ada perbedaan untuk pengguna sistem operasi windows dan linux/mac, tetapi tenang penulis akan memberikan kedua nya baik itu windows maupun linux/mac.
Buka terminal (jangan lupa buka sebagai administrator ya jika windows), dan pastikan sudah berada pada direktori kafka, kemudian lakukan hal di bawah ini :
Untuk sistem operasi windows :
Terminal 1 :
./bin/windows/zookeeper-server-start.bat config/zookeeper.properties
Terminal 2 :
./bin/windows/kafka-server-start.bat config/server.properties
Untuk sistem operasi linux dan Mac :
Terminal 1 :
bin/zookeeper-server-start.sh config/zookeeper.properties
Terminal 2 :
bin/kafka-server-start.sh config/server.properties
Pastikan keduanya berjalan dan tidak ada error ya.
Sebelum lanjut, disini penulis akan memberikan beberapa contoh mengenai :
- Topic, bagaimana membuat dan melihat list topic yang tersedia
- Melakukan pengiriman pesan (produces)
- Menerima sebuah pesan (consumer)
- Simulasi topic partition dan consumer group
- Membuat producer dan consumer pada pemrograman Java
Membuat sebuah topic
Untuk sistem operasi windows :
Terminal 3:
./bin/windows/kafka-topics.bat --create --topic example-topic replication-factor 1 --partitions 1 --bootstrap-server localhost:9092
Untuk sistem operasi linux dan Mac :
Terminal 3:
bin/kafka-topics.sh --create --topic example-topic replication-factor 1 --partitions 1 --bootstrap-server localhost:9092
Penjelasan :
- --create --topic untuk membuat sebuah topic
- example-topic adalah sebuah nama topic yang akan di buat
- replication factor 1 adalah jumlah server yang di buat
- --partition 1 jumlah topic partisi yang di buat
- --bootstrap-server localhost:9092 adalah lokasi server dan port default server kafka
Melihat sebuah topic
Untuk sistem operasi windows :
Terminal 3:
./bin/windows/kafka-topics.bat --list --topic --bootstrap-server localhost:9092
Untuk sistem operasi linux dan Mac :
Terminal 3:
bin/kafka-topics.sh --list --topic --bootstrap-server localhost:9092
Penjelasan :
- --list --topic untuk melihat sebuah topic
- --bootstrap-server localhost:9092 adalah lokasi server dan port default server kafka
Mengirim sebuah pesan (producer)
Untuk sistem operasi windows :
Terminal 4:
./bin/windows/kafka-console-producer.bat --topic example-topic --bootstrap-server localhost:9092Create your message, example Hello World [enter] dst
Untuk sistem operasi linux dan windows :
Terminal 4:
bin/kafka-console-producer.sh --topic example-topic --bootstrap-server localhost:9092Create your message, example Hello World [enter] dst
Penjelasan :
- kafka-console-producer sebagai producer untuk pengiriman sebuah pesan
Menerima sebuah pesan (consumer)
Untuk sistem operasi windows :
Terminal 5 :
./bin/windows/kafka-console-consumer.bat --topic example-topic --from-beginning --bootstrap-server localhost:9092
Untuk sistem operasi linux dan Mac:
Terminal 5 :
bin/kafka-console-consumer.sh --topic example-topic --from-beginning --bootstrap-server localhost:9092
Penjelasan :
- kafka-console-consumer untuk consumer sebagai penerima pesan
- --from beginning untuk melihat sebuah pesan dari awal di buat/dikirim, jika tidak menggunakannya, maka pesan yang diterima adalah yang terakhir atau saat consumer aktif
Lakukan pengiriman pesan pada tab producer, lalu perhatikan pada tab consumer, maka pesan akan diterima secara bersamaan, kenapa demikian ? karena kita belum menerapkan consumer group. Consumer group memastikan data yang diterima oleh consumer tidak akan sama.
Praktik Topic Partition dan Consumer Group
Buat sebuah topic baru, untuk sistem operasi windows :
Terminal 3:
./bin/windows/kafka-topics.bat --bootstrap-server localhost:9092 replication-factor 1 --partitions 3 --create --topic example-topic-2
Buat sebuah topic baru, untuk sistem operasi linux dan mac :
Terminal 3:
bin/kafka-topics.sh --bootstrap-server localhost:9092 replication-factor 1 --partitions 3 --create --topic example-topic-2
Jika kita perhatikan, hal yang mebedakan dengan membuat sebuah topic yang pertama adalah pada bagian --partition nya, untuk membuat sebuah partition lebih dari 1 maka cukup tuliskan angka nya berapa pun yang diinginkan, tetapi pastikan jumlahnya ganjil ya.
Lakukan pengiriman pesan dengan topic yang baru.
Melihat pesan dengan menerapkan consumer group, untuk sistem operasi windows :
Terminal 5 :
./bin/windows/kafka-console-consumer.bat --topic example-topic-2 --bootstrap-server localhost:9092 --group consum./bin/windows/kafka-console-consumer.bat --topic example-topic-2 --from-beginning --bootstrap-server localhost:9092 --group consum
Melihat pesan dengan menerapkan consumer group, untuk sistem operasi linux dan mac :
Terminal 5 :
bin/kafka-console-consumer.sh --topic example-topic-2 --bootstrap-server localhost:9092 --group consumbin/kafka-console-consumer.sh --topic example-topic-2 --from-beginning --bootstrap-server localhost:9092 --group consum
Lihat apa yang terjadi, maka kedua consumer tidak akan menerima data yang duplikasi atau sama.
Buat Producer menggunakan Java
Buat sebuah project maven, kemudian tambahkan ini pada pom.xml
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>2.8.0</version>
</dependency>
Dokumentasi untuk membuat juga bisa dilihat disini https://kafka.apache.org/28/javadoc/org/apache/kafka/clients/producer/KafkaProducer.html
Buat class dengan nama KafkaProducerExample, lalu tuliskan script di bawah ini:
public class KafkaProducerExample {
public static void main(String[] args) {
Properties properties = new Properties();
properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); KafkaProducer<String, String> producer = new KafkaProducer<String,String>(properties);
for (int i = 0; i < 10; i++) {
ProducerRecord<String, String> record = new ProducerRecord<>("topic-java", "Data ke " + i);
producer.send(record);
}
producer.close();
}
}
Kemudian panggil consumer dengan topic-java yang telah dibuat dan lihat apa yang terjadi.
Buat Consumer menggunakan Java
Buat class KafkaConsumerExample, lalu tuliskan script di bawah ini:
public class KafkaConsumerExample {
public static void main(String[] args) {
Properties props = new Properties();
props.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
props.setProperty(ConsumerConfig.GROUP_ID_CONFIG, "test");
props.setProperty(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "true");
props.setProperty(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, "1000");
props.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
props.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList("topic-java")); //noinspection InfiniteLoopStatement
while (true) {
ConsumerRecords<String, String> records =
consumer.poll(Duration.ofMillis(100));
for(ConsumerRecord<String, String> record: records) {
System.out.println("Receive data : " + record.value());
}
}
}
}
Jalankan KafkaConsumerExample, pasti akan mengeluarkan log yang tidak akan berhenti, Kemudian jalankan KafkaProducerExample, maka ketika kembali di KafkaConsumerExample akan melihat data yang diterima.
Oke, EnigmaNians.
Semoga penjelasan penulis bermanfaat ya.
Referensi :
- Kafka Documentation
Enigma IT Bootcamp
Information Technology Company
For Recruitment:
📧: recruitment@enigmacamp.com
📞: +62 813 8711 8339
For Partnership:
📧: sales@enigmacamp.com
📞: +62 21 2780 6212