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

Sejarah
-------

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.

Seni bina
---------

Gambaran keseluruhan Kafka
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.

Perusahaan yang menggunakan Kafka
---------------------------------

Berikut ialah senarai perusahaan terkemuka yang pernah atau sedang menggunakan Kafka:

* Apple Inc.
* Betfair
* Cisco Systems
* Citibank
* Cloudflare
* Conviva
* Daumkakao
* eBay
* Hyperledger Fabric
* HubSpot
* Netflix
* The New York Times
* PayPal
* Pinterest
* Salesforce
* Shopify
* Spotify
* Ticketmaster
* Uber
* Walmart
* Yelp
* Flipkart

Rujukan
-------

1. ↑  "Apache Kafka at GitHub". *github.com*. Dicapai pada 5 March 2018.
2. ↑  "Open-sourcing Kafka, LinkedIn's distributed message queue". Dicapai pada 27 October 2016.
3. ↑  Primack, Dan. "LinkedIn engineers spin out to launch 'Kafka' startup Confluent". *fortune.com*. Dicapai pada 10 February 2015.
4. ↑  "What is the relation between Kafka, the writer, and Apache Kafka, the distributed messaging system?". *Quora*. Dicapai pada 2017-06-12.
5. ↑  "Kafka Summit London".
6. ↑  "Exchange Market Data Streaming with Kafka". *betsandbits.com*. Diarkibkan daripada yang asal pada 2016-05-28. Unknown parameter `|deadurl=` ignored (bantuan)
7. ↑  "OpenSOC: An Open Commitment to Security". *Cisco blog*. Dicapai pada 2016-02-03.
8. ↑  "More data, more data". Diarkibkan daripada yang asal pada 2021-03-01. Dicapai pada 2019-02-07.
9. ↑  "More data, more data".
10. ↑  "Conviva home page". *Conviva*. 2017-02-28. Dicapai pada 2017-05-16.
11. ↑  Doyung Yoon. "S2Graph : A Large-Scale Graph Database with HBase".
12. ↑  "Kafka Usage in Ebay Communications Delivery Pipeline".
13. ↑  "Cryptography and Protocols in Hyperledger Fabric" (PDF). January 2017. Dicapai pada 2017-05-05.
14. ↑  "Kafka at HubSpot: Critical Consumer Metrics".
15. ↑  Cheolsoo Park and Ashwin Shankar. "Netflix: Integrating Spark at Petabyte Scale".
16. ↑  Boerge Svingen. "Publishing with Apache Kafka at The New York Times". Dicapai pada 2017-09-19.
17. ↑  Shibi Sudhakaran of PayPal. "PayPal: Creating a Central Data Backbone: Couchbase Server to Kafka to Hadoop and Back (talk at Couchbase Connect 2015)". *Couchbase*. Diarkibkan daripada yang asal pada 2016-09-17. Dicapai pada 2016-02-03.
18. ↑  Boyang Chen of Pinterest. "Pinterest: Using Kafka Streams API for predictive budgeting". *medium*. Dicapai pada 2018-02-21.
19. ↑  Alexey Syomichev. "How Apache Kafka Inspired Our Platform Events Architecture". *engineering.salesforce.com*. Dicapai pada 2018-02-01.
20. ↑  "Shopify - Sarama is a Go library for Apache Kafka".
21. ↑  Josh Baer. "How Apache Drives Spotify's Music Recommendations".
22. ↑  Patrick Hechinger. "CTOs to Know: Meet Ticketmaster's Jody Mulkey".
23. ↑  "Stream Processing in Uber". *InfoQ*. Dicapai pada 2015-12-06.
24. ↑  "Apache Kafka for Item Setup". *medium.com*. Dicapai pada 2017-06-12. Cite has empty unknown parameter: `|1=` (bantuan)
25. ↑  "Streaming Messages from Kafka into Redshift in near Real-Time". *Yelp*. Dicapai pada 2017-07-19. Cite has empty unknown parameter: `|1=` (bantuan)
26. ↑  "Near Real Time Search Indexing at Flipkart".

Pautan luar
-----------

* Tapak web rasmi