Kafka 简介
kafka 是一个分布式的, 可分区的, 可复制的消息发布和订阅系统, 具有高性能和高吞吐率.
kafka 消息队列的特点如下:
1. 消费者和生产者模式
2.FIFO 先进进出的有序性
3. 分布式
4. 高吞吐率
5. 消息被处理的状态是在 consumer 端维护的, 而不是由 server 进行维护的. 所以, 失败的时候, 还可以自动平衡.
理解上面的特点:
1. 生产者和消费者, 在 kafka 中只要是谁生产数据, 谁就是生产者. 谁要是消费数据, 谁就是消费者.
2. 先进先出(比如排队, 先来的来办事情).
3. 分布式的, 前面学到的 flume 也是分布式的, 每个组件都可以扩展. kafka 所有的组件: broker(服务段集群),producer(生产者集群),concumer(消费者集群)都是分布式的. 所以 kafka 的扩展性好, 可靠性高. 可以做到负载均衡和副本冗余. 看下图:
4. 高吞吐率. 上面说到 kafka 的每个节点都可以分布式, 所以他可以为消息的分布和订阅提供高吞吐量, 单节点支持上千个客户端, 百兆每秒的网络 IO.
5. 消息的状态在 consumer 端进行维护, 保存在 zookeeper 中, 但是老师提了一下保存在 kafaka 中.
6. 持久化: 持久化到磁盘而且性能好! kafak 本身采用零拷贝技术, 不受速度的限制.
对大数据以及人工智能概念都是模糊不清的, 该按照什么线路去学习, 学完往哪方面发展, 想深入了解, 想学习的同学欢迎加入大数据学习 qq 群: 515269485, 有大量干货 (零基础以及进阶的经典实战) 分享给大家, 并且有清华大学毕业的资深大数据讲师给大家免费授课, 给大家分享目前国内最完整的大数据高端实战实用学习流程体系 . 从 java 和 Linux 入手, 其后逐步的深入到 HADOOP-hive-oozie-web-flume-python-hbase-kafka-scala-SPARK 等相关知识一一分享!
Kafka 消息队列常用场景
1. 系统间的解耦.
2. 峰值压力缓冲.
3. 异步 (并行) 通信.
4. 一些常规的消息系统.
Kafka 架构
producer(生产者), 自己决定自己往哪一个 partition 写数据, 这里的策略可以是轮询, hash .
consumer(消费者), 自己保存消费的消息的 offset , 消费者会按照顺序消费消息, 也就是说 offset 按照线性向前驱动. 可以认为 offset 是 partition 中 Message 的 id.
broker:Kafka 集群的 server 服务. 负责处理消息的读, 写请求, 存储消息.
topic: 一个 Topic 可以认为是一类消息, 每个 topic 将被分成多个 partition(区), 每个 partition 在存储层面是 append log 文件. 任何发布到此 partition 的消息都会被直接追加到 log 文件的尾部, 每条消息在文件中的位置称为 offset(偏移量),offset 为一个 long 型数字, 它是唯一标记一条消息. 它唯一的标记一条消息. kafka 并没有提供其他额外的索引机制来存储 offset, 因为在 kafka 中几乎不允许对消息进行 "随机读写".
一个 topic 分成多个 partition. 每个 partition 内部消息强有序, 其中每个消息都有一个序号叫 offset. 一个 partition 之对应一个 broker, 一个 broker 可以有多个 partition. 消息不经过内存缓冲, 直接写入文件. 根据时间策略删除, 而不是消费完就删除
partitions 的设计目的有多个. 最根本原因是 kafka 基于文件存储. 通过分区, 可以将日志内容分散到多个 server 上, 来避免文件尺寸达到单机磁盘的上限, 每个 partiton 都会被当前 server(kafka 实例)保存; 可以将一个 topic 切分多任意多个 partitions, 来消息保存 / 消费的效率. 此外越多的 partitions 意味着可以容纳更多的 consumer, 有效提升并发消费的能力.
安装部署
1. 选择 2.10 版本的 kafka, 因为 scala2.10 版本的兼容性比较好.
2.config/server.properties 配置 broker.id 从 0 开始, 后面其他节点配置 1,2,3,4 等等.
3. 事先启动 zookeeper 集群, 这里配置 zookeeper 集群的地址.
zookeeper.connect=node01:2181,node02:2181,node03:2181
4. 启动:
nohup bin/kafka-server-start.sh config/server.properties> kafka.log 2>&1 &
可以把上述命令写到一个脚本中, VIM start-kafka.sh , 之后启动只需要运行脚本即可.
5. 把配置好的安装包, 分发到其他节点上. 注意修改 broker.id
对大数据以及人工智能概念都是模糊不清的, 该按照什么线路去学习, 学完往哪方面发展, 想深入了解, 想学习的同学欢迎加入大数据学习 qq 群: 515269485, 有大量干货 (零基础以及进阶的经典实战) 分享给大家, 并且有清华大学毕业的资深大数据讲师给大家免费授课, 给大家分享目前国内最完整的大数据高端实战实用学习流程体系 . 从 java 和 Linux 入手, 其后逐步的深入到 HADOOP-hive-oozie-Web-flume-python-hbase-kafka-scala-SPARK 等相关知识一一分享!
来源: http://www.jianshu.com/p/00e4057b7579