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.

zookeeper.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.

server.properties

Sama hal nya dengan zookeeper.properties, pada server.properties ubah pada bagian log.dirs juga.

Hal terpenting lainnya adalah pada bagian ini :

broker

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

https://www.enigmacamp.com/

--

--

--

Enigma IT Bootcamp Blog

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Enigmacamp

Enigmacamp

Enigma IT Bootcamp Blog

More from Medium

Kafka and Its Components

Kafka Customer → Get Specific Messages Only

Kafka in a nutshell

REDIS TRANSACTION IN JAVA

Redis transaction commands