
Selama pekerjaan aplikasi perusahaan apa pun, data dihasilkan: ini adalah file log, metrik, informasi tentang aktivitas pengguna, pesan keluar, dll. Manipulasi yang tepat dari semua data ini tidak kalah pentingnya daripada data itu sendiri. Jika Anda seorang arsitek, pengembang, atau insinyur lulusan yang ingin menyelesaikan masalah seperti itu, tetapi belum mengenal Apache Kafka, maka dari buku yang luar biasa ini Anda akan belajar cara bekerja dengan platform streaming gratis ini yang memungkinkan Anda memproses antrian data secara real time.
Untuk siapa buku ini?
“Apache Kafka. Pemrosesan aliran dan analisis data ”ditulis untuk pengembang yang menggunakan Kafka API dalam pekerjaan mereka, serta insinyur proses (juga disebut SRE, DevOps atau administrator sistem) yang terlibat dalam pemasangan, konfigurasi, konfigurasi, dan pemantauan operasinya selama operasi industri. Kami juga tidak melupakan arsitek data dan insinyur analitik - mereka yang bertanggung jawab atas desain dan pembuatan seluruh infrastruktur data perusahaan. Beberapa bab, khususnya 3, 4 dan 11, ditujukan untuk pengembang Java. Untuk memahaminya, penting bagi pembaca untuk memahami dasar-dasar bahasa pemrograman Java, termasuk masalah-masalah seperti penanganan pengecualian dan kompetisi.
Bab-bab lain, terutama 2, 8, 9, dan 10, mengasumsikan bahwa pembaca memiliki pengalaman dengan Linux dan terbiasa dengan pengaturan jaringan dan penyimpanan Linux. Sisa dari arsitektur buku dan perangkat lunak Kafka dibahas secara umum, sehingga tidak diperlukan pengetahuan khusus dari pembaca.
Kategori lain dari orang yang mungkin tertarik dengan buku ini adalah manajer dan arsitek yang bekerja tidak secara langsung dengan Kafka, tetapi dengan mereka yang bekerja dengannya. Tidak kalah penting bahwa mereka memahami apa jaminan platform dan apa kompromi yang harus dilakukan bawahan dan kolega mereka ketika membuat sistem berbasis Kafka. Buku ini akan berguna bagi para manajer yang ingin melatih karyawan mereka untuk bekerja dengan Kafka atau untuk memastikan bahwa tim pengembangan memiliki informasi yang diperlukan.
Bab 2. Memasang Kafka
Apache Kafka adalah aplikasi Java yang dapat berjalan di banyak sistem operasi, termasuk Windows, MacOS, Linux, dan lainnya. Dalam bab ini, kita akan fokus pada pemasangan Kafka di Linux, karena itu adalah platform yang paling sering diinstal pada sistem operasi ini. Linux juga merupakan sistem operasi yang direkomendasikan untuk penyebaran Kafka untuk tujuan umum. Untuk informasi tentang menginstal Kafka di Windows dan MacOS, lihat Lampiran A.
Instal javaSebelum menginstal ZooKeeper atau Kafka, Anda harus menginstal dan mengkonfigurasi lingkungan Java. Disarankan agar Anda menggunakan Java 8, dan ini mungkin versi, baik yang termasuk dalam sistem operasi Anda atau langsung diunduh dari java.com. Meskipun ZooKeeper dan Kafka akan bekerja dengan Java Runtime Edition, lebih nyaman menggunakan Java Development Kit (JDK) penuh saat mengembangkan utilitas dan aplikasi. Langkah-langkah instalasi ini mengasumsikan bahwa Anda memiliki JDK versi 8.0.51 diinstal di direktori /usr/java/jdk1.8.0_51.
Instal ZooKeeperApache Kafka menggunakan ZooKeeper untuk menyimpan metadata tentang cluster Kafka, serta detail tentang klien konsumen (Gbr. 2.1). Meskipun ZooKeeper juga dapat diluncurkan menggunakan skrip yang termasuk dalam distribusi Kafka, menginstal versi lengkap dari repositori ZooKeeper dari distribusinya sangat sederhana.
Kafka telah diuji secara menyeluruh dengan versi stabil dari repositori ZooKeeper, yang dapat diunduh dari apache.org.
Server mandiriContoh berikut menunjukkan menginstal ZooKeeper dengan pengaturan dasar di direktori / usr / local / zookeeper dan menyimpan data di direktori / var / lib / zookeeper:
# tar -zxf zookeeper-3.4.6.tar.gz # mv zookeeper-3.4.6 /usr/local/zookeeper # mkdir -p /var/lib/zookeeper # cat > /usr/local/zookeeper/conf/zoo.cfg << EOF > tickTime=2000 > dataDir=/var/lib/zookeeper > clientPort=2181 > EOF # /usr/local/zookeeper/bin/zkServer.sh start JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED # export JAVA_HOME=/usr/java/jdk1.8.0_51 # /usr/local/zookeeper/bin/zkServer.sh start JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED #
Sekarang Anda dapat memverifikasi bahwa ZooKeeper seharusnya bekerja offline dengan menghubungkan ke port klien dan mengirim perintah srvr empat huruf:
# telnet localhost 2181 Trying ::1... Connected to localhost. Escape character is '^]'. srvr Zookeeper version: 3.4.6-1569965, built on 02/20/2014 09:09 GMT Latency min/avg/max: 0/0/0 Received: 1 Sent: 0 Connections: 1 Outstanding: 0 Zxid: 0x0 Mode: standalone Node count: 4 Connection closed by foreign host. #
Ensemble ZooKeeperCluster ZooKeeper disebut ansambel. Karena sifat algoritme itu sendiri, disarankan agar ansambel menyertakan jumlah server ganjil, misalnya, 3, 5, dll., Karena agar ZooKeeper dapat menanggapi permintaan, mayoritas anggota ansambel harus berfungsi (kuorum). Ini berarti bahwa ansambel tiga node dapat bekerja dengan satu node idle. Jika ensembel memiliki tiga node, mungkin ada dua.
Untuk mengkonfigurasi operasi server ZooKeeper di ensemble, mereka harus memiliki konfigurasi tunggal dengan daftar semua server, dan setiap server dalam direktori data harus memiliki file myid dengan pengidentifikasi server ini. Jika host di ensemble diberi nama zoo1.example.com, zoo2.example.com dan zoo3.example.com, maka file konfigurasi mungkin terlihat seperti ini:
tickTime=2000 dataDir=/var/lib/zookeeper clientPort=2181 initLimit=20 syncLimit=5 server.1=zoo1.example.com:2888:3888 server.2=zoo2.example.com:2888:3888 server.3=zoo3.example.com:2888:3888
Dalam konfigurasi ini, initLimit adalah jumlah waktu yang dapat dihubungkan oleh slave node ke master. Nilai syncLimit membatasi kelambatan node slave dari master. Kedua nilai ditentukan dalam satuan tickTime, mis. InitLimit = 20 · 2000 ms = 40 dtk. Konfigurasi ini juga mencantumkan semua server ensemble. Mereka berada dalam format server.X = hostname: peerPort: leaderPort dengan parameter berikut:
- X adalah pengidentifikasi server. Itu harus bilangan bulat, tetapi hitungannya mungkin bukan dari nol dan tidak berurutan;
- hostname - nama host atau alamat IP server;
- peerPort - port TCP di mana server ensemble berkomunikasi satu sama lain;
- leaderPort - port TCP di mana host dipilih.
Sudah cukup bahwa klien dapat terhubung ke ensemble melalui port clientPort, tetapi anggota ensemble harus dapat bertukar pesan satu sama lain di ketiga port.
Selain file konfigurasi tunggal, setiap server di direktori dataDir harus memiliki file myid. Seharusnya berisi pengidentifikasi server yang sesuai dengan yang diberikan dalam file konfigurasi. Setelah menyelesaikan langkah-langkah ini, Anda dapat memulai server dan mereka akan berinteraksi satu sama lain dalam ansambel.
Menginstal Kafka Broker
Setelah menyelesaikan konfigurasi Java dan ZooKeeper, Anda dapat melanjutkan dengan instalasi Apache Kafka. Rilis terbaru Apache Kafka dapat diunduh di
kafka.apache.org/downloads.html .
Pada contoh berikut, instal platform Kafka di direktori / usr / local / kafka, konfigurasikan untuk menggunakan server ZooKeeper yang diluncurkan sebelumnya dan simpan segmen log pesan di direktori / tmp / kafka-logs:
# tar -zxf kafka_2.11-0.9.0.1.tgz # mv kafka_2.11-0.9.0.1 /usr/local/kafka # mkdir /tmp/kafka-logs # export JAVA_HOME=/usr/java/jdk1.8.0_51 # /usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties #
Setelah meluncurkan pialang Kafka, Anda dapat menguji fungsinya dengan melakukan operasi sederhana apa pun dengan cluster, termasuk membuat topik pengujian, membuat pesan, dan menggunakannya.
Membuat dan memeriksa utas:
# /usr/local/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test Created topic "test". # /usr/local/kafka/bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic test Topic:test PartitionCount:1 ReplicationFactor:1 Configs: Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0 #
Membuat pesan untuk topik pengujian:
# /usr/local/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test Test Message 1 Test Message 2 ^D #
Mengkonsumsi pesan dari topik tes:
# /usr/local/kafka/bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning Test Message 1 Test Message 2 ^C Consumed 2 messages #
Konfigurasi broker
Contoh konfigurasi broker yang disertakan dengan distribusi Kafka sangat cocok untuk uji coba server yang berdiri sendiri, tetapi untuk sebagian besar instalasi itu tidak akan cukup. Ada banyak opsi konfigurasi Kafka yang mengatur semua aspek instalasi dan konfigurasi. Anda dapat meninggalkan nilai default untuk banyak dari mereka, karena mereka berhubungan dengan nuansa mendirikan broker Kafka yang tidak berlaku sampai Anda bekerja dengan skenario tertentu yang mengharuskan mereka untuk digunakan.
Pengaturan broker dasar
Ada beberapa pengaturan broker Kafka yang harus Anda pertimbangkan ketika memasang platform di lingkungan apa pun, kecuali untuk broker yang berdiri sendiri di server terpisah. Parameter ini berhubungan dengan pengaturan utama broker, dan sebagian besar dari mereka harus diubah sehingga broker dapat bekerja dalam satu cluster dengan broker lain.
broker.idSetiap broker Kafka harus memiliki pengenal integer yang ditentukan oleh parameter broker.id. Secara default, nilai ini adalah 0, tetapi dapat berupa angka berapa pun. Hal utama adalah bahwa itu tidak terulang dalam cluster Kafka yang sama. Pilihan nomor dapat arbitrer, dan jika perlu, untuk kenyamanan perawatan, dapat ditransfer dari satu broker ke broker lainnya. Diharapkan bahwa nomor ini entah bagaimana terhubung dengan host, maka korespondensi pengenal broker dengan host dengan pelacakan akan lebih transparan. Misalnya, jika nama host Anda berisi angka unik (misalnya, host1.example.com, host2.example.com, dll.), Angka-angka ini akan menjadi pilihan yang baik untuk nilai-nilai broker.id.
pelabuhanFile konfigurasi tipikal memulai Kafka dengan pendengar pada port TCP 9092. Port ini dapat diubah ke yang lain dengan mengubah port parameter konfigurasi. Perlu diingat bahwa ketika memilih port dengan nomor kurang dari 1024, Kafka harus dijalankan sebagai root. Menjalankan Kafka sebagai root tidak dianjurkan.
zookeeper.connectJalur yang digunakan ZooKeeper untuk menyimpan metadata broker diatur menggunakan parameter konfigurasi zookeeper.connect. Dalam konfigurasi sampel, ZooKeeper berjalan pada port 2181 pada host lokal, yang ditunjukkan sebagai localhost: 2181. Format parameter ini adalah daftar baris yang dipisahkan titik koma dari bentuk hostname: port / path, termasuk:
- hostname - hostname atau alamat IP dari server ZooKeeper;
- port - nomor port klien untuk server;
- / path - path opsional ZooKeeper yang digunakan sebagai path root (chroot) baru dari cluster Kafka. Jika tidak ditentukan, path root digunakan.
Jika jalur chroot yang ditentukan tidak ada, itu akan dibuat ketika broker memulai.
log.dirsKafka menyimpan semua pesan ke hard drive, dan segmen log ini disimpan dalam direktori yang ditentukan dalam pengaturan log.dirs. Ini adalah daftar jalur yang dipisahkan koma di sistem lokal. Jika beberapa jalur ditentukan, broker akan menyimpan bagian di dalamnya sesuai dengan prinsip yang paling sedikit digunakan, dengan mempertahankan segmen log dari satu bagian di sepanjang satu jalur. Perhatikan bahwa broker akan menempatkan bagian baru dalam direktori di mana saat ini partisi paling sedikit disimpan, dan bukan ruang paling sedikit digunakan, sehingga distribusi data yang seragam di antara bagian tidak dijamin.
num.recovery.threads.per.data.dirKafka menggunakan kumpulan utas khusus untuk memproses segmen log. Saat ini diterapkan:
- selama startup normal - untuk membuka segmen log dari setiap bagian;
- mulai setelah kegagalan - untuk memeriksa dan memotong segmen log dari setiap bagian;
- Stop - untuk menutup segmen log dengan lembut.
Secara default, hanya satu utas yang digunakan per direktori log. Karena ini hanya terjadi ketika memulai dan menghentikan, masuk akal untuk menggunakan lebih banyak dari mereka untuk memparalelkan operasi. Ketika pulih dari shutdown yang salah, manfaat menggunakan pendekatan ini dapat mencapai beberapa jam jika broker dengan sejumlah besar partisi dimulai kembali! Ingat bahwa nilai parameter ini ditentukan berdasarkan satu direktori log dari jumlah yang ditentukan menggunakan log.dirs. Yaitu, jika nilai parameter num.recovery.threads.per.data.dir adalah 8, dan tiga jalur ditentukan dalam log.dirs, maka jumlah total utas adalah 24.
auto.create.topics.enableMenurut konfigurasi default Kafka, broker harus secara otomatis membuat tema ketika:
- pabrikan mulai menulis di baris subjek;
- konsumen mulai membaca dari topik pesan;
- klien meminta metadata topik.
Dalam banyak kasus, perilaku ini mungkin tidak diinginkan, terutama karena kenyataan bahwa tidak ada cara untuk memeriksa keberadaan suatu topik menggunakan protokol Kafka tanpa menyebabkannya dibuat. Jika Anda mengontrol pembuatan itu secara eksplisit, manual atau melalui sistem inisialisasi, Anda dapat mengatur parameter auto.create.topics.enable menjadi false.
Pengaturan Tema Default
Konfigurasi server Kafka menetapkan banyak pengaturan default untuk tema yang dibuat. Beberapa parameter ini, termasuk jumlah bagian dan parameter penyimpanan pesan, dapat diatur untuk setiap topik secara terpisah menggunakan alat administrator (dibahas pada Bab 9). Nilai default dalam konfigurasi server harus ditetapkan sama dengan nilai referensi yang cocok untuk sebagian besar topik klaster.
num.partitionsParameter num.partitions menentukan dengan berapa banyak bagian topik baru dibuat, terutama ketika pembuatan otomatis berdasarkan tema diaktifkan (yang merupakan perilaku default). Nilai default dari parameter ini adalah 1. Ingatlah bahwa jumlah bagian untuk suatu topik hanya dapat ditingkatkan, tetapi tidak dikurangi. Ini berarti bahwa jika membutuhkan lebih sedikit partisi daripada yang ditunjukkan dalam num.partitions, Anda harus membuatnya secara manual (ini dibahas pada Bab 9).
Seperti dibahas di Bab 1, bagian adalah cara untuk menskala topik dalam sebuah cluster Kafka, jadi penting bahwa Anda memiliki sebanyak yang Anda butuhkan untuk menyeimbangkan beban pesan di seluruh cluster saat broker ditambahkan. Banyak pengguna lebih suka bahwa jumlah partisi sama dengan atau jumlah broker di kluster. Hal ini memungkinkan untuk mendistribusikan bagian secara merata di antara broker, yang akan mengarah pada distribusi beban yang merata di seluruh pesan. Namun, ini bukan persyaratan wajib, karena keberadaan beberapa topik memungkinkan Anda untuk menyeimbangkan beban.
log.retention.msLebih sering daripada tidak, penyimpanan pesan di Kafka terbatas dalam waktu. Nilai default ditentukan dalam file konfigurasi menggunakan parameter log.retention.hours dan sama dengan 168 jam, atau 1 minggu. Namun, Anda dapat menggunakan dua parameter lain - log.retention.minutes dan log.retention.ms. Ketiga parameter ini menentukan hal yang sama - periode waktu setelah pesan dihapus. Tetapi disarankan untuk menggunakan parameter log.retention.ms, karena jika beberapa parameter ditentukan, prioritas menjadi unit ukuran terkecil, sehingga nilai log.retention.ms akan selalu digunakan.
log.retention.bytesCara lain untuk membatasi validitas pesan didasarkan pada ukuran total (dalam byte) dari pesan yang disimpan. Nilai diatur menggunakan parameter log.retention.bytes dan diterapkan secara terpisah. Ini berarti bahwa dalam kasus topik delapan bagian dan sama dengan 1 GB nilai log.retention.bytes, jumlah maksimum data yang disimpan untuk topik ini adalah 8 GB. Perhatikan bahwa jumlah penyimpanan tergantung pada masing-masing bagian, dan bukan pada topik. Ini berarti bahwa jika jumlah bagian untuk topik meningkat, jumlah maksimum data yang disimpan saat menggunakan log.retention.bytes juga akan meningkat.
log.segment.bytesPengaturan logging menyebutkan segmen log yang diperhatikan, bukan pesan individual. Karena pesan dihasilkan oleh broker Kafka, pesan tersebut ditambahkan ke akhir segmen jurnal saat ini pada bagian yang sesuai. Ketika segmen log mencapai ukuran yang ditentukan oleh parameter log.segment.bytes dan sama dengan 1 GB secara default, segmen ini ditutup dan yang baru terbuka. Setelah ditutup, segmen jurnal dapat dihentikan. Semakin kecil ukuran segmen log, semakin sering Anda harus menutup file dan membuat yang baru, yang mengurangi efisiensi keseluruhan penulisan disk.
Mengukur segmen log adalah penting ketika topik dikarakterisasi oleh frekuensi rendah dari pembuatan pesan. Misalnya, jika suatu topik hanya menerima 100 MB pesan per hari, dan parameter log.segment.bytes diatur ke nilai default, dibutuhkan 10 hari untuk mengisi satu segmen. Dan karena pesan tidak dapat dinyatakan tidak valid hingga segmen log ditutup, maka dengan nilai 604,8 juta (1 minggu) parameter log.retention.ms, pesan dapat terakumulasi dalam 17 hari sebelum segmen log tertutup ditarik dari peredaran. Ini karena ketika Anda menutup segmen dengan pesan yang terakumulasi lebih dari 10 hari, Anda harus menyimpannya selama 7 hari sebelum Anda dapat menghentikannya sesuai dengan aturan sementara yang diadopsi, karena segmen tersebut tidak dapat dihapus sebelum pesan terakhir di dalamnya berakhir. .
log.segment.msCara lain untuk mengontrol penutupan segmen log adalah dengan menggunakan parameter log.segment.ms, yang menentukan lamanya waktu setelah segmen log ditutup. Seperti parameter log.retention.bytes dan log.retention.ms, parameter log.segment.bytes dan log.segment.ms tidak saling eksklusif. Kafka menutup segmen log ketika waktu habis atau batas ukuran yang ditentukan tercapai, tergantung pada peristiwa mana yang terjadi terlebih dahulu. Secara default, nilai parameter log.segment.ms tidak disetel, akibatnya penutupan segmen log ditentukan oleh ukurannya.
message.max.bytesPialang Kafka memungkinkan penggunaan parameter message.max.bytes untuk membatasi ukuran maksimum pesan yang dihasilkan. Nilai default untuk parameter ini adalah 1.000.000 (1 MB). Pabrikan yang mencoba mengirim pesan yang lebih besar akan menerima pemberitahuan kesalahan dari broker, tetapi pesan itu tidak akan diterima. Seperti halnya semua ukuran lain dalam byte yang ditentukan dalam pengaturan broker, kita berbicara tentang ukuran pesan terkompresi, sehingga produsen dapat mengirim pesan yang ukurannya dalam bentuk yang tidak terkompresi jauh lebih besar jika mereka dapat dikompresi hingga batas yang ditentukan oleh parameter message.max.bytes .
Meningkatkan ukuran pesan dapat secara serius memengaruhi kinerja. Ukuran pesan yang lebih besar berarti bahwa utas pialang yang memproses koneksi dan permintaan jaringan akan memakan waktu lebih lama untuk setiap permintaan. Pesan yang lebih besar juga meningkatkan jumlah data yang ditulis ke disk, yang memengaruhi throughput I / O.
Pemilihan perangkat keras
Memilih perangkat keras yang tepat untuk broker Kafka lebih merupakan seni daripada sains. Platform Kafka itu sendiri tidak memiliki persyaratan perangkat keras yang ketat, itu akan bekerja tanpa masalah pada sistem apa pun. Tetapi jika kita berbicara tentang kinerja, maka itu dipengaruhi oleh beberapa faktor: kapasitas dan throughput disk, RAM, jaringan dan CPU.
Pertama, Anda perlu memutuskan jenis kinerja yang paling penting untuk sistem Anda, setelah itu Anda dapat memilih konfigurasi perangkat keras optimal yang sesuai dengan anggaran.
Throughput disk
Throughput disk broker, yang digunakan untuk menyimpan segmen log, secara langsung mempengaruhi kinerja pelanggan manufaktur. Pesan Kafka harus dikomit ke penyimpanan lokal yang mengkonfirmasi rekaman mereka. Hanya dengan begitu operasi pengiriman dapat dianggap berhasil. Ini berarti bahwa semakin cepat operasi penulisan ke disk dilakukan, semakin sedikit penundaan dalam pembuatan pesan.
Tindakan nyata jika terjadi masalah dengan bandwidth disk adalah menggunakan hard drive dengan pelat pemintalan (HDD) atau drive solid-state drive (SSD). SSD memiliki pesanan lebih besar, waktu pencarian / akses lebih rendah, dan kinerja lebih tinggi. HDD lebih ekonomis dan memiliki kapasitas relatif lebih tinggi. Kinerja HDD dapat ditingkatkan karena jumlahnya yang lebih besar di broker, atau dengan menggunakan beberapa direktori data, atau dengan memasang disk dalam array disk independen dengan redundansi (redundansi array disk independen, RAID). Faktor-faktor lain mempengaruhi throughput, misalnya, teknologi pembuatan hard disk (misalnya, SAS atau SATA), serta karakteristik pengontrol hard disk.
Kapasitas disk
Kapasitas adalah aspek lain dari penyimpanan. Jumlah ruang disk yang diperlukan ditentukan oleh berapa banyak pesan yang perlu disimpan pada saat bersamaan. Jika broker diharapkan menerima 1 TB lalu lintas per hari, maka dengan penyimpanan 7 hari, ia akan membutuhkan penyimpanan yang tersedia untuk segmen log setidaknya 7 TB. Anda juga harus mempertimbangkan kelebihan setidaknya 10% untuk file lain, tidak termasuk buffer untuk fluktuasi lalu lintas yang mungkin atau pertumbuhannya dari waktu ke waktu.
Kapasitas penyimpanan adalah salah satu faktor yang harus dipertimbangkan ketika menentukan ukuran cluster Kafka yang optimal dan memutuskan ekspansi. Total traffic cluster dapat diseimbangkan dengan beberapa bagian untuk setiap topik, yang memungkinkan Anda untuk menggunakan broker tambahan untuk meningkatkan kapasitas yang tersedia dalam kasus di mana kepadatan data per broker tidak cukup. Keputusan tentang berapa banyak ruang disk yang dibutuhkan juga ditentukan oleh strategi replikasi yang dipilih untuk cluster (dibahas lebih rinci dalam Bab 6).
Memori
Dalam mode operasi normal, konsumen Kafka membaca dari akhir bagian, dan konsumen terus-menerus mengganti waktu yang hilang dan hanya sedikit di belakang produsen, jika ada. , , . , , -.
Kafka JVM . , X X , 5 . Kafka . Kafka , , , Kafka.
, Kafka, . ( ) . Kafka ( ) . 1 , , . , (. 6) ( 8). , .
CPU
, , . . Kafka, , . . Kafka ' . .
Kafka
Kafka , , Amazon Web Services (AWS). AWS , CPU, . Kafka. , . / SSD. (, AWS Elastic Block Store). CPU .
, AWS m4 r3. m4 , , . r3 SSD-, . i2 d2.
Kafka
Kafka , (. 2.2). — . — . Kafka . Kafka. 6.
?
Kafka . — . 10 , 2 , — . , 100 % ( ) (. 6). , .
, , — . , ( ). 80 % , , . , , . , , .
Kafka. — zookeeper.connect. ZooKeeper . — broker.id. broker.id , . , , , .
Linux , , Kafka. , , . /etc/sysctl.conf, Linux, .
Linux . , «» , Kafka.
, , , () . , , Kafka. , Kafka , , .
— . — , - . . vm.swappiness , 1. ( ) , . , .
, «» , , . Kafka /. : (, SSD), NVRAM (, RAID). «» , . vm.dirty_background_ratio , ( 10). ( ), 5. 0, .
«» , , vm.dirty_ratio , — 20 ( ). , 60 80. , / . vm.dirty_ratio Kafka, .
«» Kafka . /proc/vmstat:
# cat /proc/vmstat | egrep "dirty|writeback" nr_dirty 3875 nr_writeback 29 nr_writeback_temp 0 #
Berkendara
, RAID- , . , EXT4 (fourth extended file system — ) XFS (Extents File System — ). EXT4 , . , (5), . EXT4 , . XFS , , EXT4. XFS Kafka , , . , /.
, , noatime. /: (ctime), (mtime) (atime). atime . . atime , , , ( realtime). Kafka atime, . noatime /, ctime mtime.
Linux — , , . Kafka , - . ( ) , . . net.core.wmem_default net.core.rmem_default , 2 097 152 (2 ). , , .
TCP net.ipv4.tcp_wmem net.ipv4.tcp_rmem. , , . — 4096 65536 2048000 — , 4 , — 64 , — 2 . , net.core.wmem_max net.core.rmem_max. Kafka .
. TCP 1 net.ipv4.tcp_window_scaling, . net.ipv4.tcp_max_syn_backlog , 1024, . net.core.netdev_max_backlog, 1000, , , , .
Kafka , .
Java , , . , Java 7 Garbage First (G1). G1 . , , .
G1 . .
- MaxGCPauseMillis. . — G1 . 200 . , G1 , , , , 200 .
- InitiatingHeapOccupancyPercent. , . 45. , G1 , 45 % , (Eden), .
Kafka , . 64 , Kafka 5 . 20 MaxGCPauseMillis. InitiatingHeapOccupancyPercent 35, , .
Kafka G1, . . :
# export JAVA_HOME=/usr/java/jdk1.8.0_51 # export KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+DisableExplicitGC -Djava.awt.headless=true" # /usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties #
Kafka , . - , . Kafka (. 6), . Kafka, .
Kafka , , ( , , AWS), , . . , «» (. 6).
: Kafka , , , . ( ) . , , .
ZooKeeper
Kafka ZooKeeper , . ZooKeeper Kafka. , ZooKeeper Kafka . ZooKeeper Kafka ( ZooKeeper , ).
ZooKeeper . ZooKeeper, Kafka, . ZooKeeper , ZooKeeper . — 1 , . ZooKeeper, , . ZooKeeper , . , Kafka Kafka ZooKeeper.
Kafka, , . Kafka ZooKeeper, . ZooKeeper, . , , , . , , .
Ringkasan
, Apache Kafka. , , . , Kafka, Kafka. Kafka ( 3), ( 4).
»Informasi lebih lanjut tentang buku ini dapat ditemukan di
situs web penerbit»
Isi»
Kutipan
20% —
Apache Kafka