KAFKA-开发者视角-概念理解

kafka是目前应对大数据需求下支持高吞吐量,高可用性,大数据量的消息队列。灵活使用kafka的特性可以解决很多实际的业务问题.
        kafka是采用集群部署可以横向扩展的架构。
        说到集群就不得不说一下分布式,两者都有压力分摊为设计目的。简单说一下对集群和分布式的理解。

集群:通过分流数据达到压力分摊的目的。同一功能模块,多实例部署模式。可以简单理解为功能相同,数据分流处理的架构。扩展方式为横向扩展,一般扩展能力比较强。

分布式:通过拆分为多个功能模块,从而实现系统压力的分摊.可以简单理解为功能不同,但数据流相同的架构。扩展方式为纵向扩展,一般在系统架构设计完后就固定了。业务系统设计成分布式之后,随之而来的一个问题就是各个分布式模块之间通信,消息队列的应用就不可少了。对于解耦各模块的消息队里而言,kafka是个不错的选择。

        然后说一下kafka设计理念相关的概念
        producer:生产者,发送数据到kafka集群的程序。
        consumer:消费者,从kafka消费数据的程序。
        topic:队列,一般一个topic里面放置的数据是同一业务类型。应用场景:通过不同的队列来区分业务数据。
        group:分组,对于同一份数据一般有两种消费方式,重复消费和分流消费。通过group就可以事项这两种不同的模式。在同一个分组的消费者是分流消费,份数不同分组的消费者是重复消费。应用场景:对同一份业务数据,如果有不同的处理,使用重复消费;如果要进行集群分压,可以采用分流方式。

        对于kafka简单使用而言,知道这两个概念就可以了。但是要使用kafka的高级功能,还需要继续深入学习...
        partition:分区,是topic存储数据的重要概念,数据分块。分区的多寡,需要按照业务需求设置,影响消费者和生产者。对于消费者而言,一个消费者可以对于多个分区,但是一个分区只能对应一个消费者,最理想的情况就是一个分区对应一个消费者。不当的分区数会带来性能上的浪费,反例1:一个消费者,100个分区,那么这个消费者每次消费的时候就要轮询(简单理解为轮询策略)100个分区的数据,对这100个分区消费的切换就是额外的性能浪费。反例2:10个消费者,一个分区,那么其中9个消费者都是拿不到数据的,傻傻杵在哪儿。
    生产者往kafka发送数据,可以指定具体要发送哪个分区,也可以指定发送多个分区的策略。现举一例:有时候处理业务数据需要严格按照时序,kafka中怎么实现呢,就是topic只创建一个分区,这样在消费的时候就可以保证消息的顺序和发送的时候一致了。

    replication factor:复制因子,也可以通俗说成用于备份数。对于一些系统,不仅仅要考虑性能还要考虑高可用,也就是要求系统对故障和错误有一定的抵抗能力。kafka就是通过复制因子实现部分高可用功能的。这部分高可用简单讲一下,在创建topic的时候指定的复制因子的个数就是当前topic数据的副本数,而这些副本会落到集群不同的机器上,一旦其中一台机器宕机,只要还存有一个副本,这部分数据就不会丢失。前面说到的集群也是高可用的实现,集群中一个节点宕机,其他节点依然可以提供服务。


每取得些许进步,都是站在巨人的肩膀上。 

每取得些许进步,都像个捡到贝壳的孩子。

每次总结都有额外的收获。

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