kafka优点

Kafka是由LinkedIn开发的一个分布式的消息系统,同时支持离线和在线日志处理。

Kafka框架本身使用Scala编写,因其可水平扩展和高吞吐率而被广泛使用。目前,越来越多的开源分布式处理系统如Cloudera、Apache Storm、Spark都支持与Kafka集成。

Kafka的持久化方案是写入磁盘,虽然内存读写速度明显快过磁盘读写速度,但Kafka却通过线性读写的方式实现快速读写。

Kafka保存消息时根据topic进行归类,消息的发布者称为producer,消息的订阅者称为consumer,每个Kafka实例称为broker(中间的存储阵列)。后三者都通过Zookeeper进行协调,也就是

1、启动Zookeeper的server
2、启动Kafka的server
3、Producer生产数据,然后通过Zookeeper找到broker,再将数据发布到broker进行保存
4、Consumer通过Zookeeper找到broker,然后再消费数据

这里写图片描述

Topic

这里写图片描述
每个Topic被分成多个partition(区)。每条消息在partition中的位置称为offset(偏移量),类型为long型数字。消息即使被消费了,也不会被立即删除,而是根据broker里的设置,保存一定时间后再清除。比如log文件设置存储两天,那两天后消息不论是否被消费,都会被清除。

Consumer

每个consumer属于一个consumer group。在Kafka中,一个partition的消息只会被group中的一个consumer消费;可以认为一个group就是一个“订阅者”。一个Topic中的每个partition只会被一个“订阅者”中的一个consumer消费。

Kafka优点

  • 解耦和扩展性
    消息队列中间件都有着解耦的功能,解耦也意味着扩展性。将复杂的代码逻辑移至到远端程序上,而源程序本身只需要发送一个消息,通知远端程序消费。两边的程序可以独立扩展、修改,不相互影响。

  • 冗余
    Kafka会将partition中的消息存储一段时间,消息即使被消费了,也不会被立即删除,通过这一方式规避了数据丢失风险。

  • 削峰填谷
    我们不能以一个应用系统峰值流量所需要的资源来部署服务,因为这样的突发流量并不常见,所以这会是巨大的浪费。那么,系统具有”削峰填谷”的能力是至关重要的。使用消息队列将峰值时的流量请求持久化,待稍后流量正常或低谷时再取出消费。

  • 容错性
    当消费者组中的其中一台或几台消费者实例挂掉,它们消费的partition消息会被转移到同组的其它存活着的消费者实例。系统的一部分组件失效时,不会影响到整个系统。

  • 顺序保证
    Kafka保证一个Partition内的消息的有序性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章