Kafka最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。
#### 特性:
* 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个[topic]可以分多个partition,consumer group 对partition进行consume操作。
* 可扩展性:kafka集群支持热扩展
* 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
* 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)
* 高并发:支持数千个客户端同时读写
#### 适用场景:
* 日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。
* 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。
* 运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。
* 消息系统:解耦和生产者和消费者、缓存消息等。
* 流式处理:比如spark streaming和storm
### 对应Scala版本选择合适的二进制kafka包下载
http://kafka.apache.org/downloads
### 解压并配置(注:zookeeper已安装)
```
vi config/server.properties
```
三台机器配置文件分别为:
master:
```
broker.id=0
host.name=master
zookeeper.connect=master:2181,slave1:2181,slave2:2181
```
slave1:
```
broker.id=1
host.name=slave1
zookeeper.connect=master:2181,slave1:2181,slave2:2181
```
slave2
```
broker.id=2
host.name=slave2
zookeeper.connect=master:2181,slave1:2181,slave2:2181
```
### 启动kafka并测试demo:
(注:保证zookeeper已启动)
```
三台机器分别启动kafka:
[hadoop@* software]$ cd kafka_2.11-2.0.1
[hadoop@* kafka_2.11-2.0.1]$ bin/kafka-server-start.sh -daemon config/server.properties
```
```
bin/kafka-topics.sh --create --zookeeper master:2181 --replication-factor 1 --partitions 1 --topic test
```
—create表示创建一个topic
—zookeeper master:2181 表示连接zookeeper 的服务和端口号
—replication-factor 1表示创建副本数量是1
—partitions 1表示分区数量是1
—topic test表示创建一个名为test11的topic主题
启动一个(多个)生产者:
```
bin/kafka-console-producer.sh --broker-list master:9092 --topic test
```
—kafka-console-producer.sh表示启动一个生产者
—broker-list master:9092表示broker服务列表中的master服务和端口号
—topic test表示topic名字为test
启动一个(多个)消费者:
```
bin/kafka-console-consumer.sh --bootstrap-server master:9092 --from-beginning --topic test
```
—kafka-console-consumer.sh表示启动一个消费者
—zookeeper master:2181表示连接zookeeper 的服务和端口号
—topic test表示topic名字为test
—from-beginning 表示在消费者还没有一个已经建立的偏移量的时候,从最早的消息开始而不是从最新的消息开始
```
kafka2.0 producer javadoc
http://kafka.apache.org/20/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html
kafka2.0 consumer javadoc
http://kafka.apache.org/20/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html
```