Kursus
Partisi adalah komponen penting dalam arsitektur terdistribusi Kafka yang memungkinkan Kafka melakukan penskalaan horizontal, sehingga pemrosesan data paralel menjadi efisien. Partisi menjadi blok bangunan untuk mengatur dan mendistribusikan data di seluruh klaster Kafka.
Anggap saja partisi sebagai saluran individual di dalam sebuah topik tempat pesan disimpan. Setiap partisi dapat memiliki beberapa replika yang tersebar di berbagai broker, sehingga menjamin toleransi kesalahan dan redundansi data.
Selain itu, partisi memberikan jaminan pengurutan, memastikan bahwa pesan dalam satu partisi diproses sesuai urutan saat diproduksi. Ini menjadikan partisi Kafka sangat penting dalam menjaga integritas dan konsistensi data, yang krusial untuk skenario pemrosesan data waktu nyata.
Dalam artikel ini, kita akan membahas lebih dalam hal-hal berikut:
- Dasar-dasar arsitektur Kafka
- Mengapa partisi penting di Kafka
- Menyiapkan Partisi
- Manajemen partisi tingkat lanjut
- Pemecahan masalah partisi yang umum
Anda dapat melihat perbandingan Kafka vs SQS kami untuk panduan rinci tentang bagaimana kedua alat tersebut dibandingkan.
Dasar-Dasar Arsitektur Kafka

Gambaran arsitektur Kafka - Sumber
Apache Kafka adalah platform streaming terdistribusi sumber terbuka yang dirancang untuk throughput tinggi, toleransi kesalahan, dan skalabilitas, sehingga menjadi pilihan populer untuk membangun pipeline data dan aplikasi waktu nyata.
Pada intinya, Kafka terdiri dari banyak komponen. Komponen ini mencakup producer, consumer, broker, topik, dan partisi, dan masing-masing memainkan peran penting dalam sistem secara keseluruhan.
- Producer bertanggung jawab menghasilkan data dan mengirimkannya ke topik Kafka. Mereka menerbitkan pesan ke broker Kafka, biasanya dalam format key-value.
- Broker adalah server yang menyimpan dan mengelola topik Kafka. Mereka menangani replikasi data, distribusi, dan komunikasi antara producer dan consumer.
- Topik adalah kategori logis atau aliran data di dalam Kafka. Topik bertindak sebagai antrian pesan tempat producer menerbitkan data dan consumer mengambilnya.
- Partisi adalah unit dasar penyimpanan dan distribusi data dalam topik Kafka.
- Consumer adalah aplikasi atau proses yang berlangganan topik Kafka untuk mengambil dan memproses data. Mereka membaca pesan dari satu atau lebih partisi dan dapat dikelompokkan ke dalam consumer group untuk penyeimbangan beban dan pemrosesan paralel.
Pentingnya Partisi Kafka
Partisi berperan kunci dalam membentuk efisiensi dan ketangguhan Kafka. Partisi memfasilitasi distribusi data di seluruh broker Kafka, memungkinkan penskalaan horizontal.
Dengan membagi topik menjadi partisi, Kafka dapat menyebarkan beban kerja pemrosesan data ke beberapa server, sehingga memungkinkan pemanfaatan sumber daya yang efisien dan mengakomodasi volume data yang meningkat tanpa membebani broker individual.
Selain itu, partisi juga memungkinkan paralelisme dalam pemrosesan data. Consumer dapat membaca dari beberapa partisi secara bersamaan, mendistribusikan beban komputasi dan meningkatkan throughput. Konsumsi data paralel ini memastikan pemanfaatan sumber daya consumer yang efisien dan mengurangi latensi dalam pipeline pemrosesan data.
Alasan lain mengapa partisi penting di Kafka adalah karena partisi membantu kemampuan toleransi kesalahan pada platform. Setiap partisi dapat memiliki beberapa replika yang didistribusikan di berbagai broker. Jika terjadi kegagalan broker, Kafka dapat terus menyajikan data dari replika yang dihosting pada broker lain, memastikan ketersediaan dan keandalan data.
Intinya, partisi penting karena banyak alasan. Partisi sangat krusial bagi arsitektur Kafka dan memainkan peran sentral dalam memungkinkan skalabilitas, toleransi kesalahan, paralelisme, dan konsistensi data.
Cara Kafka Mengelola Partisi
Seperti disebutkan sebelumnya, setiap partisi bertindak sebagai urutan rekaman yang tersegmentasi, terurut, dan tidak dapat diubah. Saat producer mengirim data ke Kafka, ia menggunakan logika partisi untuk menentukan partisi mana dalam sebuah topik tempat data harus dituliskan.
Logika ini dapat didasarkan pada berbagai faktor, seperti key yang terkait dengan data atau partitioner kustom yang diimplementasikan oleh producer. Setelah partisi ditentukan, Kafka menambahkan data ke akhir partisi, mempertahankan urutan pesan berdasarkan offset-nya.
Secara internal, broker Kafka menangani penyimpanan dan replikasi data partisi. Setiap partisi dapat memiliki beberapa replika yang didistribusikan di berbagai broker untuk memastikan toleransi kesalahan.
Model leader-follower diterapkan, di mana satu broker berperan sebagai leader yang bertanggung jawab menangani permintaan baca dan tulis untuk partisi, sementara broker lain bertindak sebagai follower yang mereplikasi data dari leader. Pengaturan ini memastikan daya tahan dan ketersediaan data bahkan jika terjadi kegagalan broker.
Menyiapkan Partisi Kafka
Sebelum menyiapkan partisi Kafka, pastikan Apache Kafka dan Zookeeper telah diinstal, dikonfigurasi, dan berjalan di komputer lokal Anda. Ini direkomendasikan untuk kompatibilitas yang optimal. Selain itu, pastikan Java 8 atau versi yang lebih baru telah terpasang dan berfungsi.
Perlu dicatat bahwa Kafka dapat mengalami berbagai masalah saat diinstal di Windows karena kurangnya kompatibilitas asli dengan sistem operasi ini. Oleh karena itu, disarankan menggunakan metode berikut untuk menjalankan Apache Kafka di Windows:
- Pertimbangkan menggunakan WSL2 atau Docker untuk Windows 10 atau yang lebih baru
- Gunakan Docker untuk Windows 8 atau yang lebih lama
Menggunakan JVM untuk menjalankan Kafka di Windows tidak dianjurkan karena tidak memiliki karakteristik POSIX tertentu yang melekat pada Linux. Mencoba menjalankan Kafka di Windows tanpa WSL2 dapat menimbulkan kesulitan pada akhirnya.
Anda dapat mempelajari lebih lanjut tentang menyiapkan Apache Kafka di Apache Kafka for Beginners: A Comprehensive Guide.
Berikut panduan langkah demi langkah untuk menyiapkan partisi:
Langkah 1: Jalankan Zookeeper
Buka command prompt dan navigasikan ke direktori root Kafka. Setelah itu, jalankan perintah berikut untuk memulai Zookeeper:
bin/zookeeper-server-start.sh config/zookeeper.properties
Langkah 2: Jalankan server Kafka
Buka command prompt lain dan jalankan perintah berikut dari root Apache Kafka untuk memulai Apache Kafka:
.\bin\windows\kafka-server-start.bat .\config\server.properties
Langkah 3: Buat topik dengan 3 partisi
Untuk membuat topik dengan tiga partisi, mulai command prompt baru dari direktori root Kafka dan jalankan perintah berikut:
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic my_topic
Ini akan membuat topik Kafka baru bernama “my_topic.”
Catatan: untuk mengonfirmasi bahwa topik dibuat dengan benar, eksekusi perintah akan menampilkan “Create topic <name of topic>.”
Anda dapat memverifikasi bahwa topik dibuat dengan benar dengan menjalankan:
bin/kafka-topics.sh --list --zookeeper localhost:2181
Yang seharusnya menghasilkan output:
my_topic
Manajemen Partisi Tingkat Lanjut
Repartisi topik yang sudah ada
Repartisi topik yang sudah ada di Kafka melibatkan modifikasi jumlah partisi, yang mungkin diperlukan untuk mengakomodasi perubahan volume data, meningkatkan paralelisme, atau mengoptimalkan pemanfaatan sumber daya.
Berikut beberapa teknik dan pertimbangan untuk merepartisi topik yang sudah ada:
Mengubah jumlah partisi
- Gunakan perintah
kafka-topics.sh --alteruntuk menambah jumlah partisi dari topik yang sudah ada. Ini akan mendistribusikan ulang data ke partisi baru. - Mengurangi jumlah partisi lebih kompleks dan mungkin melibatkan migrasi data atau pemrosesan ulang untuk mengonsolidasikan data dari beberapa partisi menjadi lebih sedikit partisi.
Redistribusi data
- Usahakan distribusi data yang merata di seluruh partisi untuk memaksimalkan paralelisme dan pemanfaatan sumber daya.
- Pantau distribusi data secara berkala untuk mengidentifikasi partisi mana pun dengan jumlah data yang tidak proporsional dan ambil tindakan korektif.
Dampak pada Consumer
- Repartisi dapat memengaruhi consumer group, terutama jika consumer bergantung pada penugasan partisi untuk distribusi beban kerja. Rencanakan penyesuaian yang diperlukan pada konfigurasi consumer group.
Retensi Data dan Daya Tahan
- Pastikan kebijakan retensi data tetap dipatuhi selama proses repartisi untuk menghindari kehilangan atau inkonsistensi data.
- Repartisi tidak boleh mengorbankan daya tahan atau ketersediaan data. Replika harus dipertahankan dengan benar sepanjang proses.
Menangani data yang sedang berjalan (inflight)
- Repartisi dapat menyebabkan data yang sedang berjalan diarahkan ke partisi berbeda. Pastikan producer dan consumer dapat menangani skenario ini dengan baik.
Pengujian dan Validasi
- Lakukan operasi repartisi di lingkungan staging untuk memvalidasi dampaknya terhadap pemrosesan data dan perilaku consumer sebelum menerapkan perubahan di produksi.
- Pantau kinerja klaster Kafka selama dan setelah repartisi untuk mengidentifikasi masalah apa pun dan memastikan kinerja optimal.
Penyeimbangan dan optimasi partisi
Mengoptimalkan penggunaan dan kinerja partisi di Kafka sangat penting untuk memastikan pemrosesan data yang efisien, pemanfaatan sumber daya yang optimal, dan skalabilitas sistem secara keseluruhan.
Berikut beberapa strategi untuk penyeimbangan dan optimasi partisi:
Jumlah partisi yang optimal
- Tentukan jumlah partisi yang optimal berdasarkan volume data, kebutuhan throughput, dan sumber daya klaster. Hindari membuat partisi terlalu sedikit atau terlalu banyak.
- Tinjau kembali jumlah partisi secara berkala seiring berkembangnya volume data dan kebutuhan pemrosesan.
Konfigurasi consumer group
- Pastikan partisi consumer group selaras dengan partisi topik untuk memaksimalkan paralelisme dan mendistribusikan beban kerja secara merata di antara consumer.
- Sesuaikan pengaturan rebalancing consumer group: Fine-tune pengaturan rebalancing untuk meminimalkan gangguan dan mengoptimalkan penggunaan sumber daya selama rebalancing.
Strategi partisi pada producer
- Gunakan partisi berbasis key agar pesan terkait secara konsisten diarahkan ke partisi yang sama, menjaga urutan dan memungkinkan pemrosesan data yang efisien.
- Pertimbangkan penugasan pesan secara acak ke partisi untuk mendistribusikan beban kerja secara merata di seluruh broker demi penyeimbangan beban.
Pemantauan dan penyetelan
- Pantau terus metrik klaster Kafka terkait penggunaan partisi, throughput, latensi, dan pemanfaatan sumber daya.
- Sesuaikan konfigurasi broker Kafka, seperti ukuran heap, ukuran buffer, dan thread pool, untuk mengoptimalkan kinerja dan menangani lonjakan beban kerja secara efektif.
Skala horizontal dan peningkatan perangkat keras:
- Tambahkan lebih banyak broker ke klaster Kafka untuk mendistribusikan replika partisi dan meningkatkan throughput serta toleransi kesalahan secara keseluruhan.
- Pertimbangkan peningkatan sumber daya perangkat keras seperti CPU, memori, dan penyimpanan untuk meningkatkan kinerja klaster Kafka dan menangani volume data yang lebih tinggi.
Pemecahan Masalah Partisi yang Umum
Kafka telah menjadi tulang punggung banyak aplikasi yang intensif data, tetapi meminjam kata-kata Paman Ben dari Spider-Man, dengan kekuatan besar datang pula potensi tantangan kompleks yang meningkat.
Cukup banyak masalah partisi umum yang dapat muncul saat menggunakan Kafka. Hal ini bisa disebabkan oleh salah konfigurasi, keterbatasan sumber daya, distribusi data yang tidak merata, atau hal lain.
Di bagian ini, kita akan membahas lebih dalam masalah partisi yang umum dan cara menyelesaikannya.
Distribusi data yang tidak merata
Ketika data didistribusikan secara tidak merata di seluruh partisi, beberapa partisi dapat menjadi hotspot, mengakibatkan pemanfaatan sumber daya yang tidak merata dan potensi hambatan kinerja. Cara mengatasinya adalah dengan terus memantau distribusi data, yang dapat dilakukan dengan alat pemantauan Kafka seperti Kafka Manager atau Confluent Control Center. Pertimbangkan juga penerapan strategi partisi kustom atau menambah jumlah partisi untuk mencapai distribusi data yang lebih seimbang.
Ukuran partisi besar
Ketika sebuah partisi menumpuk sejumlah besar data seiring waktu, hal ini dapat menyebabkan penurunan kinerja dan peningkatan latensi saat pengambilan dan pemrosesan data.
Kunci untuk mengatasi masalah ini adalah secara rutin memantau ukuran partisi dan membagi partisi besar menjadi partisi yang lebih kecil untuk mendistribusikan data lebih merata. Selain itu, menyesuaikan kebijakan retensi membantu mengontrol jumlah data yang disimpan di partisi.
Partisi dengan replikasi kurang
Partisi dengan replikasi kurang terjadi ketika jumlah in-sync replica (ISR) berada di bawah minimum yang dikonfigurasi akibat kegagalan broker atau masalah jaringan.
Untuk mencegah hal ini, pantau status replikasi partisi dan selidiki setiap partisi yang replikasinya kurang. Pastikan faktor replikasi dikonfigurasi dengan tepat untuk mempertahankan tingkat toleransi kesalahan yang diinginkan. Segera atasi masalah yang terkait dengan konektivitas jaringan atau kegagalan broker.
Ketidakseimbangan leader partisi
Leader partisi menangani permintaan baca dan tulis dalam klaster Kafka. Ketidakseimbangan leader partisi di seluruh broker dapat menyebabkan pemanfaatan sumber daya yang tidak merata dan potensi masalah kinerja.
Hal ini dapat dicegah dengan memantau distribusi leader partisi menggunakan Kafka Manager atau Confluent Control Center dan melakukan rebalancing leader jika diperlukan. Pertimbangkan juga penyesuaian konfigurasi broker untuk mendistribusikan leader partisi secara merata di seluruh broker.
Skew partisi
Skew partisi terjadi ketika partisi tertentu menerima volume lalu lintas yang jauh lebih tinggi dibandingkan partisi lainnya, yang menyebabkan pemanfaatan sumber daya tidak merata dan potensi penurunan kinerja. Karena itu penting untuk menganalisis pola lalu lintas.
Pertimbangkan penerapan strategi partisi kustom untuk mendistribusikan data secara merata ke seluruh partisi dan mengoptimalkan konfigurasi consumer group untuk mendistribusikan beban kerja secara merata di antara consumer.
Kesimpulan
Apache Kafka adalah platform streaming terdistribusi yang tangguh dan menjadi tulang punggung bagi banyak aplikasi yang intensif data. Di intinya terdapat konsep partisi, yang merupakan unit esensial untuk mengatur dan mendistribusikan data dalam topik Kafka. Partisi sangat penting dalam ekosistem Kafka, memungkinkan skalabilitas, toleransi kesalahan, paralelisme, dan pemrosesan data yang efisien.
Dengan mendistribusikan data ke beberapa broker, partisi memungkinkan Kafka menangani volume data besar sambil mempertahankan throughput tinggi dan keandalan. Selain itu, partisi memfasilitasi pemrosesan data paralel, memastikan pemanfaatan sumber daya yang optimal dan pengurangan latensi.
Pada akhirnya, memahami dan mengelola partisi secara efektif sangat penting untuk memaksimalkan kinerja dan keandalan klaster Kafka, menjadikannya komponen yang tak tergantikan dalam membangun pipeline data dan aplikasi waktu nyata yang skalabel dan tangguh.
Berikut beberapa sumber untuk melanjutkan pembelajaran Anda:
FAQ Partisi Kafka
Berapa banyak partisi yang dimiliki Apache Kafka?
Apache Kafka sendiri tidak memiliki jumlah partisi yang telah ditetapkan. Jumlah partisi dalam topik Kafka bersifat dapat dikonfigurasi dan dapat bervariasi berdasarkan faktor seperti kebutuhan skalabilitas, paralelisme consumer, persyaratan replikasi, dan karakteristik beban kerja. Admin atau pengembang dapat menyesuaikan jumlah partisi untuk mengoptimalkan kinerja dan pemanfaatan sumber daya untuk kasus penggunaan spesifik mereka.
Berapa banyak partisi yang sebaiknya saya miliki di Kafka?
Jumlah partisi yang ideal di Kafka bergantung pada kasus penggunaan Anda, kebutuhan skalabilitas, dan batasan sumber daya. Secara umum, capailah keseimbangan antara throughput, paralelisme, dan toleransi kesalahan. Mulailah dengan jumlah yang konservatif dan pantau kinerja dengan cermat, tingkatkan secara bertahap jika diperlukan untuk memenuhi permintaan aplikasi Anda sambil mempertimbangkan faktor seperti paralelisme consumer, replikasi, dan sumber daya broker.
Apa kegunaan banyak partisi di Kafka?
Penggunaan banyak partisi adalah untuk memfasilitasi ketersediaan tinggi, skalabilitas, dan pemrosesan data yang efisien. Secara lebih spesifik, partisi membantu dalam hal berikut:
- Skalabilitas: Memungkinkan penskalaan horizontal dengan mendistribusikan data ke beberapa broker, sehingga memungkinkan throughput lebih tinggi dan pemrosesan paralel.
- Paralelisme: Setiap partisi dapat dikonsumsi oleh satu consumer dalam sebuah consumer group, memungkinkan pemrosesan paralel aliran data dan meningkatkan kinerja sistem secara keseluruhan.
- Toleransi Kesalahan: Replikasi partisi di seluruh broker memastikan ketahanan data dan toleransi kesalahan. Jika sebuah broker gagal, replika lain dapat mengambil alih, memastikan ketersediaan data yang berkelanjutan.
Penyeimbangan Beban: Mendistribusikan data ke seluruh partisi membantu menyeimbangkan beban kerja di antara broker, mencegah hotspot dan mengoptimalkan pemanfaatan sumber daya.

