1.概览
分布式流处理平台。
分布式, 副本, 容错的分布式存储流.
在系统之间构建实时数据流管道。
以topic分类对记录进行存储
每个记录包含key-value+timestamp
每秒钟百万消息吞吐量。
Java 的 JMS 有2种模式: 发布订阅模式( 拿到的是 copy) & 队列模式(queue):
kafka 通过 group 把这两种模式完美的结合起来
- 如果想要实现queue 模式, 就把消费者放在同一组, 此组中只能有一个成员来消费此消息
- 想要实现发布订阅模式, 就把每个消费者各自一组, 每个人都可以拿到一个消息副本
关键词:
- producer //消息生产者
- consumer //消息消费者
- consumer group //消费者组
- kafka server //broker,kafka服务器
- topic //主题,副本数,分区.
- zookeeper //hadoop namenoade + RM HA | hbase | kafka
优化方案:
- 把磁盘挂载在某个目录, 然后让这个目录, 只是存储某个分区的数据
kafka 的要点
一条消息是存在一个分区的
副本–可靠性
分区–高效性 => 并发访问
分区(partition)是 producer 通过负载均衡选择的
一个分区存着多条消息, 消息是有序的
一个分区内的消息只能被一个组内的一个成员消费
topic 是在 kafka server 上
topic 包含 副本数, 分区
producer & consumer 都是针对 topic 来操作的
kafka 的 consumer 是拉模式, 从 kafka去pull 消息, 实时计算框架有多大能力, 就 pull 多少
所以 kafka 一般都用在实时/准实时 计算中
顺序读写
- 追加数据, 是追加到最后
- 读取是从开头读取
- 可用 offset 跳转到指定的数据段
- 数据可重复消费
Consumers
- 一条数据只能被同组内一个成员消费
- 不同组的可以消费同一个数据
SSD读写速度: 1200 ~ 3500 MB/s
注意点:
- Kafka 的分区数, 可以动态调整
- Kafka 的每个分区都有对应的冗余数量, 默认是1
- 每个分区如果有多个副本, 这些副本中, 会有一个是 active 的状态, 负责读写, 其它的都是 standby 的状态
- 对于HDFS和kafka的 block partition 对于不同的文件或者topic来说,都可以有不同的副本数!(每个 topic 可以单独设置)
设置的副本数不能超过broker的数量!!!
Kafka 的大致工作模式:
1、启动 ZooKeeper 的 server
2、启动 Kafka 的 server
3、Producer 生产数据,然后通过 ZooKeeper 找到 Broker,再将数据 push 到 Broker 保存
4、Consumer 通过 ZooKeeper 找到 Broker,然后再主动 pull 数据
2.安装 kafka
1 | 0.选择cs1 ~ cs6, 6台主机都安装kafka |
3.kafka集群在zk的配置
1 | /controller ===> {"version":1,"brokerid":202,"timestamp":"1490926369148" |
4.kafka 主题&副本操作
1 | --------------------------------------------------------------------- |
5.Kafka java API
5.0 pom 文件
1 | <?xml version="1.0" encoding="UTF-8"?> |
5.1实现消息生产者,发送&接受 消息
1 | package com.rox.kafkademo.test; |
5.2 新的 API
6.Flume 集成 kafak
6.1KafkaSink
kafka 是 consumer (消费者)
flume 的消息, 经由 kafkaSink 导出到 kafka –最常用
1 | [flume 为生产者] |
6.2 KafkaSource :TODO
flume source 从 kafka 抓数据, flume source 是消费者, kafka 开启 producer.
1 | [消费者] |
6.3 KafkaChannel :TODO
1 | :TODO 也出错 ?? |