jafka guide

27
JAFKA A fast MQ

Upload: ady-liu

Post on 15-Jan-2015

5.373 views

Category:

Technology


1 download

DESCRIPTION

A fast Message-Queue base on zookeeper. Jafka mq is a distributed publish-subscribe messaging system cloning from Apache Kafka. So it has following features: (1)Persistent messaging with O(1) disk structures that provide constant time performance even with many TB of stored messages. (2)High-throughput: even with very modest hardware single broker can support hundreds of thousands of messages per second. (3)Explicit support for partitioning messages over broker servers and distributing consumption over a cluster of consumer machines while maintaining per-partition ordering semantics. (4)Simple message format for many language clients.

TRANSCRIPT

Page 1: Jafka guide

JAFKA

A fast MQ

Page 2: Jafka guide

overview

● https://github.com/adyliu/jafka● 271KB single jar● 3.5MB with all dependencies and

configurations● So simple, so fast

2jafka mq

Page 3: Jafka guide

Maven Usage

<dependency>

<groupId>com.sohu.jafka</groupId>

<artifactId>jafka</artifactId>

<version>1.0-rc7</version>

</dependency>

3jafka mq

Page 4: Jafka guide

Dependencies

● Zkclient– Zookeeper

● Log4j● Jackson

● Optional dependencies:– Mx4j-tools– jopt-simple

4jafka mq

Page 5: Jafka guide

Future

● A full kafka clone (http://incubator.apache.org/kafka)

● Persisten messaging with O(1)

● Constant time performance even with TB messages

● High-throughput (100k/s)

● Distributed messaging system

– producers/brokers/consumers● Auto load balancing

● Simple message format

5jafka mq

Page 6: Jafka guide

Message format (1)

6jafka mq

Page 7: Jafka guide

Message format (2)

7jafka mq

Page 8: Jafka guide

Log Implementation

8jafka mq

Page 9: Jafka guide

Architech and workflow

9jafka mq

Page 10: Jafka guide

Zookeeper nodes

10jafka mq

Page 11: Jafka guide

Offset length limit

● Long.MAX_VALUE– 9223372036854775807 → 9*1018

● If one message size is 1k– Messages: 9*1015

– If producing 1 billion messages per day● Continuing days: 9*106

● Continuing years: 24657

11jafka mq

Page 12: Jafka guide

About Filesystem

● 6 7200rpm SATA RAID-5 *

– 300MB/s linear writes (300k/s 1KB per message)– 50k/s random writes

http://incubator.apache.org/kafka/design.html 12jafka mq

Page 13: Jafka guide

sendfile() (1)

● Common data transfer

1.OS reads data from disk to pagecache

2.Application reads data from pagecache to buffer

3.Application writes data back into socket buffer

4.OS copies data from socket buffer to NIC buffer

● 4 copies + 2 system_call

13jafka mq

Page 14: Jafka guide

sendfile() (2)

● FileChannel.transferTo(long, long, WritableByteChannel)– Zero copy *

https://www.ibm.com/developerworks/linux/library/j-zerocopy/ 14jafka mq

Page 15: Jafka guide

Batch compression

● GZIP message compression default

15jafka mq

Page 16: Jafka guide

Sync or Async

● Both supported● Setting at connecting● Batch sending while using asynchronous

sending

16jafka mq

Page 17: Jafka guide

Usage

● Simple & Funny

17jafka mq

Page 18: Jafka guide

Simple usage - dependencies

<dependency> <groupId>com.sohu.suc*</groupId> <artifactId>suc-mq</artifactId> </dependency>

●Version >= 2.0-SNAPSHOT

18jafka mq

* our inner project

Page 19: Jafka guide

Simple usage - producer

Producers producers = Producers.buildProducer(); StringMessage data = new StringMessage("demo"); data.add("first message"); data.add("second message"); data.add("third message"); producers.send(data);

19jafka mq

Page 20: Jafka guide

Simple usage - consumer

public static void main(String[] args) {

Consumers.buildConsumer("demo", "adyliu", new IMessageListener<String>() { @Override public void onMessage(String message) { System.out.println(message + " ==> " + new Date()); } });}

20jafka mq

Page 21: Jafka guide

Consumer => Queue

Consumers.buildConsumer("demo", "adyliu", new IMessageListener<String>() { public void onMessage(String message) { System.out.println(message + " ==> " + new Date()); }});

Consumers.buildConsumer("demo", "adyliu", new IMessageListener<String>() { public void onMessage(String message) { System.out.println(message + " ==> " + new Date()); }});

Client A

Client A

21jafka mq

Page 22: Jafka guide

Consumer => Topic

Consumers.buildConsumer("demo", "adyliu", new IMessageListener<String>() { public void onMessage(String message) { System.out.println(message + " ==> " + new Date()); }});

Consumers.buildConsumer("demo", "zhendong", new IMessageListener<String>() { public void onMessage(String message) { System.out.println("[ 震子 ] ==> " + message); }});

Client A

Client B

22jafka mq

Page 23: Jafka guide

Properties props = new Properties();props.put("zk.connect", "localhost:2181");props.put("serializer.class", StringEncoder.class.getName());//ProducerConfig config = new ProducerConfig(props);Producer<String, String> producer = new Producer<String, String>(config);//StringProducerData data = new StringProducerData("demo");for(int i=0;i<100;i++) { data.add("Hello world #"+i);}try { long start = System.currentTimeMillis(); for (int i = 0; i < 100; i++) { producer.send(data); } long cost = System.currentTimeMillis() - start; System.out.println("send 10000 message cost: "+cost+" ms");} finally { producer.close();}

Full Producer code

23jafka mq

Page 24: Jafka guide

Full Consumer CodeProperties props = new Properties();props.put("zk.connect", "localhost:2181");props.put("groupid", "test_group");//ConsumerConfig consumerConfig = new ConsumerConfig(props);ConsumerConnector connector = Consumer.create(consumerConfig);//Map<String, List<MessageStream<String>>> topicMessageStreams = connector.createMessageStreams(ImmutableMap.of("demo", 2), new StringDecoder());List<MessageStream<String>> streams = topicMessageStreams.get("demo");//ExecutorService executor = Executors.newFixedThreadPool(2);final AtomicInteger count = new AtomicInteger();for (final MessageStream<String> stream : streams) { executor.submit(new Runnable() {

public void run() { for (String message : stream) { System.out.println(count.incrementAndGet() + " => " + message); } } });}

24jafka mq

Page 25: Jafka guide

jafka mq 25

More Documents

● https://github.com/adyliu/jafka/wiki

Page 26: Jafka guide

Open sourceFirst Java open source in maven repository at groupId com.sohu.

26jafka mq

Page 27: Jafka guide

About me

● Ady Liu● Email: [email protected][email protected]

27jafka mq