Apache Kafka

Apache Kafka ialah sebuah pelantar perisian pemprosesan strim sumber terbuka yang dibangunkan oleh Linkedin dan kemudiannya didermakan kepada Yayasan Perisian Apache. Ia dibangunkan menggunakan bahasa pengaturcaraan Scala dan Java.
Pembangunan Apache Kafka dimulakan oleh LinkedIn yang kemudiannya menyumberterbukakannya pada awal tahun 2011. Ia telah keluar dari Apache Incubator pada 23 Oktober 2012. Pada tahun 2014, Jun Rao, Key Kreps, dan Neha Narkhede, yang telah mengusahakan Kafka di LinkedIn, telah membuka sebuah syarikat baharu bernama Confluent yang bertujuan untuk menumpukan perhatian kepada Kafka. Menurut sebuah utusan Quora pada tahun 2014, Kreps menamakan perisian ini sempena nama penulis Franz Kafka kerana ia adalah "sebuah sistem yang dioptimumkan untuk penulisan", di samping kerana menggemari karya-karya Franz.
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:
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.
Berikut ialah senarai perusahaan terkemuka yang pernah atau sedang menggunakan Kafka: