共计 2391 个字符,预计需要花费 6 分钟才能阅读完成。
Kafka 是目前非常流行的消息队列中间件,常用于做普通的消息队列、网站的活性数据分析(PV、流量、点击量等)、日志的搜集(对接大数据存储引擎做离线分析)。
全部内容来自网络,可信度有待考证!如有问题,还请及时指正。
概念介绍
在 Kafka 中消息队列分为三种角色:
producer
,即生产者,负责产生日志数据。broker
,存储节点,负责按照topic
中的partition
分区,均匀分布式的存储分区。consumer
,即消费者,负责读取使用broker
中的分区。
producer
Kafka 系统中的生产者,用于产生数据并发送给 broker 进行存储。由于需要与 broker 中的分区保持 socket 连接,因此需要在 zk 中维护生产者与分区 broker 的对应关系。同一个 topic 下的数据,会以某种负载均衡的方式发送到不同的分区中。
broker
Broker 可以当做 Kafka 中的存储节点,数据按照 topic 组织,按照某种负载均衡方式分配到不同的分区中。一个 Topic 由多个分区组成,每个分区可以设置备份数量。分区由一个 leader+ 多个 followers 组成,生产者直接与 leader 进行沟通,leader 接收消息后,其他的 followers 会同步这个消息。所有的 follwers 同步消息后,该消息才会成为可消费的状态。
Broker 中 Topic 与分区,分区与生产者,分区之间的选举备份等等信息都需要 ZK 进行协调。
consumer
Consumer 是 Kafka 中的消费者,通常以组的形式存在,一个 Group 会包含多个 Consumer。每个组对应一个 Topic,该 Topic 内的分区只能对应一个消费者,也就是如果消费者很多的情况下,会出现有的消费者消费不到数据;如果消费者很少的情况下,会有消费者同时消费多个分区的数据。
Kafka 仅仅会保证一个分区的消息的消费是有序的,多个分区并不保证有序性。
为了保证数据消费的可靠性,Kakka 提供了几种消费的机制:
- 1 at most once,即消费数据后,保存 offset,就再也取不到这个数据了。
- 2 at least once,即消费数据后,保存 offset,如果保存出错,下次可能还会取到该数据
- 3 exactly once,待查阅
在 Kafka 中 offset 是由 consumer 维护的(实际可以由 zk 来完成)。这种机制有两个好处,
- 一个是可以依据 consumer 的能力来消费数据,避免产生消费数据的压力;
- 另一个就是可以自定义 fetch 消费的数据数目,可以一次读取 1 条,也可以 1 次读取 100 条。
topic
Kafka 中的数据的主题,所有的操作(如消息的存储和读取 \ 消费)都是依据 topic 完成。
partition
每个 Topic 由多个分区组成,每个分区内部的数据保证了有序性,即是按照时间序列,append 到分区的尾部。分区是有固定大小的,容量不够时,会创建新的分区。Kafka 在一定时间内会定期清理过期的文件。
这种连续性的文件存储,一方面有效的利用磁盘的线性存取;另一方面减轻了内存的压力。
zookeeper
在 Kafka 中很多节点的调度以及资源的分配,都要依赖于 zookeeper 来完成。
如:
- 1 Broker 的注册,保存 Broker 的 IP 以及端口;
- 2 Topic 注册,管理 broker 中 Topic 的分区以及分布情况
- 3 Broker 的负载均衡,讲 Topic 动态的分配到 broker 中,通过 topic 的分布以及 broker 的负载判断
- 4 消费者,每个分区的消息仅发送给一个消费者(不知道跟 zookeeper 有啥关系)
- 5 消费者与分区的对应关系,存储在 zk 中
- 6 消费者负载均衡,一旦消费者增加或者减少,都会触发消费者的负载均衡
- 7 消费者的 offset,High level 中由 zk 维护 offset 的信息;Low Level 中由自己维护 offset
伪集群环境的搭建
部署伪集群环境,即单节点环境非常简单。下载部署文件,解压后,直接运行即可。
运行命令如下:
# 启动 zookeeper
bin/zookeeper-server-start.sh config/zookeeper.properties &
# 启动 kafka
bin/kafka-server-start.sh config/server.properties &
如果想要测试,可以启动测试程序:
# 启动生产者测试程序
./kafka-console-producer.sh --broker-list localhost:9092 --topic test
# 启动消费者测试程序
./kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
在生产者界面输入的内容,就可以直接在消费者界面中看到了。
分布式发布订阅消息系统 Kafka 架构设计 http://www.linuxidc.com/Linux/2013-11/92751.htm
Apache Kafka 代码实例 http://www.linuxidc.com/Linux/2013-11/92754.htm
Apache Kafka 教程笔记 http://www.linuxidc.com/Linux/2014-01/94682.htm
Apache kafka 原理与特性(0.8V) http://www.linuxidc.com/Linux/2014-09/107388.htm
Kafka 部署与代码实例 http://www.linuxidc.com/Linux/2014-09/107387.htm
Kafka 介绍和集群环境搭建 http://www.linuxidc.com/Linux/2014-09/107382.htm
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-08/133909.htm