![7b84886b64b6b5f7233fbbfc1bffa70d.png](https://img-blog.csdnimg.cn/img_convert/7b84886b64b6b5f7233fbbfc1bffa70d.png)
一、概述
Apache Kafka最早是由LinkedIn开源出来的分布式消息系统,现在是Apache旗下的一个子项目,并且已经成为开源领域应用最广泛的消息系统之一。Kafka社区非常活跃,从0.9版本开始,Kafka的标语已经从“一个高吞吐量,分布式的消息系统”改为"一个分布式流平台"。
Kafka和传统的消息系统不同在于:
- kafka是一个分布式系统,易于向外扩展。
- 它同时为发布和订阅提供高吞吐量
- 它支持多订阅者,当失败时能自动平衡消费者
- 消息的持久化
kafka和其他消息队列的对比:
![ba78090269f627ff38a25f4e4612a642.png](https://img-blog.csdnimg.cn/img_convert/ba78090269f627ff38a25f4e4612a642.png)
二、入门实例
2.1生产者
producerimport java.util.Properties; import org.apache.kafka.clients.producer.KafkaProducer;import org.apache.kafka.clients.producer.ProducerRecord; public class UserKafkaProducer extends Thread{ private final KafkaProducer producer; private final String topic; private final Properties props = new Properties(); public UserKafkaProducer(String topic) { props.put("metadata.broker.list", "localhost:9092"); props.put("bootstrap.servers", "master2:6667"); props.put("retries", 0); props.put("batch.size", 16384); props.put("linger.ms", 1); props.put("buffer.memory", 33554432); props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); producer = new KafkaProducer(props); this.topic = topic; } @Override public void run() { int messageNo = 1; while (true) { String messageStr = new String("Message_" + messageNo); System.out.println("Send:" + messageStr); //返回的是Future,异步发送 producer.send(new ProducerRecord(topic, messageStr)); messageNo++; try { sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } } }}
2.2 消费者
Properties props = new P