Tolong jelaskan mengenai Seni bina dari Apache Kafka dalam bahasa melayu

Kafka menyimpan pesanan-pesanan kekunci-nilai (key-value) yang datang daripada seberapa banyak proses yang dipanggil penerbit. Data boleh diasing-asingkan kepada "partisyen" berbeza dalam "topik" berlainan. Dalam sesebuah partisyen, pesanan disusun rapi mengikut ofsetnya (kedudukan pesanan dalam partisyen), lalu diindekskan dan disimpan berserta cap waktu (timestamp). Proses-proses lain yang dipanggil "konsumer" boleh membaca pesanan daripada partisyen. Kafka menawarkan Streams API untuk pemprosesan strim yang membolehkan aplikasi-aplikasi Java ditulis untuk menerima data daripada Kafka serta menulis hasil balik kepada Kafka. Apache Kafka juga mampu bekerja sama dengan sistem pemprosesan strim luar seperti Apache Apex, Apache Flink, Apache Spark, dan Apache Storm.

Kafka dijalankan pada gagasan satu atau lebih pelayan (digelar broker), dan partisyen-partisyen bagi kesemua topik diagih-agihkan antara nod-nod gagasan. Tambahan lagi, partisyen-partisyen direplikakan kepada lebih daripada satu broker. Seni bina ini membolehkan Kafka mengirim strim pesanan dengan jumlah yang besar dalam cara yang tahan rosak, hatta membolehkannya mengganti beberapa sistem pesanan terdahulu seperti Java Message Service (JMS), Advanced Message Queuing Protocol (AMQP), dan sebagainya. Sejak keluaran 0.11.0.0, Kafka menawarkan tulisan bertransaksi, yang menyediakan pemprosesan strim betul-betul sekali menggunakan Streams API.

Kafka menyokong dua jenis topik: biasa dan terpadat. Topik biasa boleh dikonfigurasikan dengan suatu masa pegangan atau suatu had ruang. Jika ada rekod yang usianya melebihi masa pegangan atau melebihi had ruang partisyen yang telah ditetapkan, Kafka dibenarkan untuk menghapuskan data lama demi melapangkan ruang simpanan. Secara lalai, sesuatu topik dikonfigurasi dengan masa pegangan selama 7 hari, tetapi data juga boleh disimpan tanpa had masa. Bagi topik-topik terpadat, rekod tidak luput berasaskan masa atau ruang. Sebaliknya, Kafka menganggap pesanan-pesanan terkemudian sebagai kemaskini bagi pesanan terdahulu yang mempunyai kekunci yang sama dan menjamin bahawa pesanan terkini sesuatu kekunci tidak akan dihapuskan. Pengguna boleh menghapuskan pesanan secara menyeluruh dengan menulis pesanan penamat (tombstone message) dengan nilai null untuk kekunci tertentu.

Terdapat empat API utama dalam Kafka:

Producer API – membolehkan sesuatu aplikasi menerbitkan strim rekod.

Consumer API – membolehkan sesuatu aplikasi melanggan sesuatu topik dan memproses strim rekod.

Connector API – melaksanakan API-API boleh guna semula penerbit dan konsumer yang boleh mengaitkan topik-topik dengan aplikasi-aplikasi sedia ada.

Streams API – menukar strim input kepada strim output dan mengeluarkan hasil.

API producer dan consumer dibina di atas protokol pesanan Kafka dan menyediakan pelaksaanan rujukan dalam Java untuk klien-klien Kafka. Protokol pesanan Kafka ialah sebuah protokol perduaan yang boleh digunakan pembangun jika ingin membuat pelaksanaan konsumer atau penerbit dalam mana-mana bahasa pengaturcaraan. Ini membuatkan Kafka bebas daripada terikat dengan ekosistem JVM. Klien-klien bukan Java ada tersenarai di Wiki Apache Kafka.