Kafka 是分布式发布-订阅消息系统。它最初由LinkedIn 公司开发,之后成为Apache 项目的一部分。Kafka 是一个分布式的、可划分的、冗余备份的持久性的日志服务。它主要用于处理活跃的流式数据。在大数据系统中,常常会碰到一个问题,即整个大数据由各个子系统组成,数据需要在各个子系统中高性能、低延迟地不停地流转。传统的企业消息系统并不是很适合大规模的数据处理。为了同时处理在线应用(消息)和离线应用(数据文件、日志),出现了Kafka。Kafka 可以起到以下两个作用:
①降低系统组网复杂度。
②降低编程复杂度。各个子系统不再是相互协商接口,各个子系统类似插口插在插座上,Kafka 承担高速数据总线的作用。
与其他的消息系统相比,Kafka 分布式消息系统在设计上综合考虑了以下方面。与其他消息系统相比,Kafka 更适合在大数据场景中使用。
1.吞吐量
在分布式消息处理中,高吞吐量是必备的条件。高吞吐量是Kafka 需要实现的核心目标之一,为了满足高吞吐量的需求,Kafka 将数据磁盘持久化,消息不在内存中缓存,直接写入磁盘,充分利用磁盘的顺序读写性能。Kafka 内部还使用零拷贝技术来减少磁盘的I/O 操作。在向Kafka 生产消息时,可以选择批量生产消息,同时,还支持数据的压缩,此外,还支持并行生产。上述这些特点决定了Kafka 消息系统的高吞吐量。
2.负载均衡(www.xing528.com)
在Kafka 分布式消息系统架构中,消息是写往消息队列中的,也就是写往Topic,每个Topic 由很多个分区组成,这些分区的出现满足并行地向Kafka 中生产消息的需求。用户可以根据需求来指定消息写往哪个分区,这样可以使消息均匀分布在Kafka 中。
同时,为保证数据的高可靠性,每个Topic 的分区还有备份,将这些备份分散到不同的节点上,每个分区都由一台Kafka 节点管理,由ZooKeeper 保证故障恢复。假设某台Kafka节点挂掉,可以由ZooKeeper 协调将当前节点管理的Partition 转交其他Kafka 节点管理,这样可以实现高可用性。同时,ZooKeeper 还可以协调Kafka 系统中动态地加入Kafka 节点及消费者,自动实现均衡。
3.拉取系统
由于Kafka Broker 会持久化数据,Kafka 采用了零拷贝技术,Broker 没有内存压力,因此,消费者非常适合采取pull 的方式消费数据,这样就简化了Kafka 设计。消费者根据消费能力自主控制消息拉取速度,自主选择消费模式,例如批量、重复消费、从尾端开始消费等。
4.可扩展性
当需要增加Broker 结点时,新增的Broker 会向ZooKeeper 注册,而生产者及消费者会根据注册在ZooKeeper 上的Watcher 感知这些变化,并及时做出调整。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。