• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Something about Kafka - Why Kafka is so fast

Something about Kafka - Why Kafka is so fast



This slide briefly introduced the reason why kafka is so fast in performance.

This slide briefly introduced the reason why kafka is so fast in performance.



Total Views
Views on SlideShare
Embed Views



3 Embeds 697

http://www.scoop.it 694
http://dschool.co 2
http://webcache.googleusercontent.com 1



Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

    Something about Kafka - Why Kafka is so fast Something about Kafka - Why Kafka is so fast Presentation Transcript

    • Something about Kafka Frank Yao @超⼤大杯摩卡星冰乐 2013-06-29 13年7月5⽇日星期五
    • Agenda • WHAT is Kafka? • HOW we use it in Vipshop? • WHY Kafka is so ‘fast’? 13年7月5⽇日星期五
    • WHAT is Kafka? 13年7月5⽇日星期五
    • WHAT • “Kafka is a messaging system that was originally developed at LinkedIn to serve as the foundation for LinkedIn's activity stream and operational data processing pipeline.” 13年7月5⽇日星期五
    • User cases • Operational monitoring: real-time, heads-up monitoring • Reporting and Batch processing: load data into a data warehouse or Hadoop system 13年7月5⽇日星期五
    • Performance (Below test is from Kafka website) • Parameters: • message size = 200 bytes • batch size = 200 messages • fetch size = 1MB • flush interval = 600 messages 13年7月5⽇日星期五
    • Batch Size 13年7月5⽇日星期五
    • Consumer Throughput 13年7月5⽇日星期五
    • Data Size? 13年7月5⽇日星期五
    • Producers thread? 13年7月5⽇日星期五
    • Topic Number? 13年7月5⽇日星期五
    • Tradition Queue • ActiveMQ, RabbitMQ... 13年7月5⽇日星期五
    • 13年7月5⽇日星期五
    • My Test • Use Flume: • In/Out ~= 30w message per second 13年7月5⽇日星期五
    • Kafka in Vipshop 13年7月5⽇日星期五
    • Data ‘in’ Kafka • Operational monitoring • Nginx access log • PHP error log, slow log • Reporting and Batch processing: • Nginx access log • PHP error log, slow log • App log • b2c • Recommend • Pay • Passport 13年7月5⽇日星期五
    • How many Data? • Peak Time(10:00~10:30): • IN : 15k-20k msg per second • OUT : 30k-40k msg per second 13年7月5⽇日星期五
    • 13年7月5⽇日星期五
    • Apps depends on Kakfa 13年7月5⽇日星期五
    • Kibana(Elasticsearch) 13年7月5⽇日星期五
    • real-time pv uv 13年7月5⽇日星期五
    • HDFS 13年7月5⽇日星期五
    • Load use Kafka 13年7月5⽇日星期五
    • Replace RabbitMQ RabbitMQ Kafka Servers Load Language Deployment Client Management RabbitMQ Kafka 6 1 >10 <2.5 Erlang Scala Difficult Easy A lot Not Many Web-console JMX 13年7月5⽇日星期五
    • WHY Kafka ‘fast’ 13年7月5⽇日星期五
    • Basics • producers • consumers • consumer groups • brokers 13年7月5⽇日星期五
    • Kafka Arch 13年7月5⽇日星期五
    • Kafka Arch 13年7月5⽇日星期五
    • Kafka Deployment 13年7月5⽇日星期五
    • Major Design Elements • Persistent messages • Throughput >>> features • Consumers hold states • ALL is distributed 13年7月5⽇日星期五
    • Detail Agenda • Maximizing Performance • Filesystem vs. Memory • BTree? • Zero-copy • End-to-end Batch Compression • Consumer state • Message delivery semantics • Consumer state • Push vs. Pull • Message • Message format • Disk structure • Zookeeper • Directory Structure 13年7月5⽇日星期五
    • Maximize Performance 13年7月5⽇日星期五
    • Filesystem vs. Memory Maximize Performance 13年7月5⽇日星期五
    • Who is fast? 13年7月5⽇日星期五
    • Memory Filesystem 13年7月5⽇日星期五
    • Disk hardware linear writes random writes 6*7200rpm SATA RAID-5 300MB/sec 50k/sec 13年7月5⽇日星期五
    • ACM Pieces 13年7月5⽇日星期五
    • Let’s see something REAL 13年7月5⽇日星期五
    • Server Stats 13年7月5⽇日星期五
    • page cache • use free memory for disk caching to make random write fast 13年7月5⽇日星期五
    • 13年7月5⽇日星期五
    • Drawbacks • All disk reads and writes will go through this unified cache. This feature cannot easily be turned off without using direct I/O, so even if a process maintains an in-process cache of the data, this data will likely be duplicated in OS pagecache, effectively storing everything twice. 13年7月5⽇日星期五
    • If JVM... 13年7月5⽇日星期五
    • 13年7月5⽇日星期五
    • If we use memory(JVM) • The memory overhead of objects is very high, often doubling the size of the data stored (or worse). • Java garbage collection becomes increasingly sketchy and expensive as the in-heap data increases. 13年7月5⽇日星期五
    • cache size • at least double the available cache by having automatic access to all free memory, and likely double again by storing a compact byte structure rather than individual objects. Doing so will result in a cache of up to 28-30GB on a 32GB machine. 13年7月5⽇日星期五
    • comparison in-disk in-memory GC Initialization Logic no GC stop the world stay warm even if restarted rebuilt slow(10min for 10GB) and cold cache handle by OS handle by programs 13年7月5⽇日星期五
    • Conclusion • using the filesystem and relying on pagecache is superior to maintaining an in-memory cache or other structure 13年7月5⽇日星期五
    • Go Extreme! • Write to filesystem DIRECTLY! • (In effect this just means that it is transferred into the kernel's pagecache where the OS can flush it later.) 13年7月5⽇日星期五
    • Furthermore • You can configure: every N messages or every M seconds. It is to put a bound on the amount of data "at risk" in the event of a hard crash. • Varnish use pagecache-centric design as well. 13年7月5⽇日星期五
    • BTree Maximize Performance 13年7月5⽇日星期五
    • Background • Messaging system meta is often a BTree. • BTree operations are O(logN). 13年7月5⽇日星期五
    • BTree • O(logN) ~= constant time 13年7月5⽇日星期五
    • BTree is slow on Disk! 13年7月5⽇日星期五
    • BTree for Disk • Disk seeks come at 10 ms a pop • each disk can do only one seek at a time • parallelism is limited • the observed performance of tree structures is often super-linear 13年7月5⽇日星期五
    • Lock • Page or row locking to avoid lock the tree 13年7月5⽇日星期五
    • Two Facts • no advantage of driver density because of the heavy reliance on disk seek • need small (< 100GB) high RPM SAS drives to maintain a sane ratio of data to seek capacity 13年7月5⽇日星期五
    • Use Log file Structure! 13年7月5⽇日星期五
    • Feature • One queue is one log file • Operations is O(1) • Reads do not block writes or each other • Decouple with data size • Retain messages after consumption 13年7月5⽇日星期五
    • zero-copy Maximize Performance 13年7月5⽇日星期五
    • 1. The operating system reads data from the disk into pagecache in kernel space 2. The application reads the data from kernel space into a user-space buffer 3. The application writes the data back into kernel space into a socket buffer 4. The operating system copies the data from the socket buffer to the NIC buffer where it is sent over the network 13年7月5⽇日星期五
    • zerocopy • data is copied into pagecache exactly once and reused on each consumption instead of being stored in memory and copied out to kernel space every time it is read 13年7月5⽇日星期五
    • 13年7月5⽇日星期五
    • zerocopy performance 13年7月5⽇日星期五
    • End-to-end Batch Compression Maximizing Performance 13年7月5⽇日星期五
    • Consider that C1 C2 C3 P1 P2 2*compression+ 3*de-compression M=num(P) N=num(C) M*compression+ N*de-compression 13年7月5⽇日星期五
    • Key point • End-to-end: compress by producers and de-compress by consumers • Batch: compression aims to compress a ‘message set’ • Kafka supports GZIP and Snappy protocols 13年7月5⽇日星期五
    • Consumer State 13年7月5⽇日星期五
    • Facts • No ACK • Consumers maintain the message state 13年7月5⽇日星期五
    • Features • Message is in a partition • Stored and given out in the order they arrive • ‘ watermark’ - ‘offset’ in Kafka 13年7月5⽇日星期五
    • track state • write msg state in zookeeper • in one transaction with writing data • side benefit: ‘rewind’ msg 13年7月5⽇日星期五
    • Screenshot 13年7月5⽇日星期五
    • push vs. pull Consumer State 13年7月5⽇日星期五
    • push system • if a consumer is <defunct>? 13年7月5⽇日星期五
    • Kafka use pull model 13年7月5⽇日星期五
    • Message Format & Data structure 13年7月5⽇日星期五
    • Msg Format • N byte message: • If magic byte is 0 1. 1 byte "magic" identifier to allow format changes 2. 4 byte CRC32 of the payload 3. N - 5 byte payload • If magic byte is 1 1. 1 byte "magic" identifier to allow format changes 2. 1 byte "attributes" identifier to allow annotations on the message independent of the version (e.g. compression enabled, type of codec used) 3. 4 byte CRC32 of the payload 4. N - 6 byte payload 13年7月5⽇日星期五
    • Log format on-disk • On-disk format of a message • message length : 4 bytes (value: 1+4+n) • ‘magic’ value : 1 byte • crc : 4 bytes • payload : n bytes • partition id and node id to uniquely identify a message 13年7月5⽇日星期五
    • Kafka Log Implementation 13年7月5⽇日星期五
    • Screenshot 13年7月5⽇日星期五
    • Screenshot 13年7月5⽇日星期五
    • Writes Message 13年7月5⽇日星期五
    • Writes • Append-write • When rotate: • M : M messages in a log file • S : S seconds after last flush • Durability guarantee: losing at most M messages or S seconds of data in the event of a system crash 13年7月5⽇日星期五
    • Reads Message 13年7月5⽇日星期五
    • Buffer Reads • auto double buffer size • you can specify the max buffer size 13年7月5⽇日星期五
    • Offset Search • Search steps: 1. locating the log segment file in which the data is stored 2. calculating the file-specific offset from the global offset value 3. reading from that file offset • Simple binary in memory 13年7月5⽇日星期五
    • Features • Reset the offset • OutOfRangeException(problem we met) 13年7月5⽇日星期五
    • Deletes Message 13年7月5⽇日星期五
    • Deletes • Policy: N days ago or N GB • Deleting while reading? • a copy-on-write style segment list implementation that provides consistent views to allow a binary search to proceed on an immutable static snapshot view of the log segments 13年7月5⽇日星期五
    • Zookeeper 13年7月5⽇日星期五
    • Directory Structure Zookeeper 13年7月5⽇日星期五
    • Broker Node • /brokers/ids/[0...N] --> host:port (ephemeral node) 13年7月5⽇日星期五
    • Broker Topic • /brokers/topics/[topic]/[0...N] --> nPartions (ephemeral node) 13年7月5⽇日星期五
    • Consumer Id • /consumers/[group_id]/ids/[consumer_id] --> {"topic1": #streams, ..., "topicN": #streams} (ephemeral node) 13年7月5⽇日星期五
    • Consumer Offset Tracking • /consumers/[group_id]/offsets/[topic]/[broker_id-partition_id] --> offset_counter_value ((persistent node) 13年7月5⽇日星期五
    • Partition Owner • /consumers/[group_id]/owners/[topic]/[broker_id-partition_id] --> consumer_node_id (ephemeral node) 13年7月5⽇日星期五
    • Why Kafka fast? • Maximizing Performance • Filesystem vs. Memory • BTree? • Zero-copy • End-to-end Batch Compression • Consumer state • Message delivery semantics • Consumer state • Push vs. Pull • Message • Message format • Disk structure • Zookeeper • Directory Structure 13年7月5⽇日星期五
    • Thank You! 13年7月5⽇日星期五