kafka的原理讲解

一、kafka的定位

      kafka给自身的定位是流处理平台,包含三个层面的意思:

      1)能够发布订阅流记录。类似普通的消息系统。

      2)能够对消息进行存储。并且这种存储具有很强的容灾能力。

      3)当流记录产生的时候,能够非常方便的对流记录进行处理。这种处理可以产生新的流记录,并发布到kafka中。特别适合对记录进行整形。

      kafka的示意图如下:

         

二、kafka的版本

       这个博文发表的时候,kafka的最新版本是1.0.0,网址:http://kafka.apache.org/

三、kafka的核心概念

       1)topic。作为一个具备发布订阅能力的系统,当消息产生时,必须要有一个地方去接收这个消息的发布。这个地方的逻辑概念就是topic。比如你可以把m1、m2发布到t,把m3、m5发布到p。这样consumers 就能根据不同的主题来选择接收的消息了。

          2)partition (分片)。kafka的分片,是针对topic的,是存储的抽象概念。这个意思是说,topic可以被分成多个片,每个片独立维护。这个独立维护包含两层意思:1、每个单独的片,不能被分段存储在不同的服务器上;2、片中的消息序号是独立维护的。示意图如下:


这里有一个地方需要说明,就是消息的序号的作用。这个作用是非常大的。这涉及到kafka的消息获取机制。我们知道,一般的消息获取机制有推和拉的策略,kafka采用的是拉的策略,也就是消费者需要主动去获取消息。那么消费者可以根据序号,随意决定从哪里开始获取消息(一般情况下kafka记录了消费者最后获取的消息记录,消费者不用去改变这个值)。同时,也许是为了无效的消息一直被存储,kafka中的消息存储是有周期的,可以通过配置修改这个周期。比如修改为2天,那么无论消息是否被消费,两天前的消息都会被清除掉。

      特别要说下分片的价值,这是kafka非常优秀的特性。它带来了两个主要的作用:1、单个topic的数据存储量可以超过单个服务器的存储能力,只要分个片就搞定了。2、提升了并发处理的能力。可以在多个片上进行处理。

        3)Producer (生产者)。生产者将消息放入到topic中,甚至可以选择放入到对应的某个分片中。分片的选择可以采用轮询的方案,也可以采用hash的方案。当然如果必要,消费者也可以选择从哪个片进行消费。

        4)Consumers (消费者)。消费者,即消息的使用者。真实微服务环境中,多个相同的服务,只要有一个服务去处理某个消息就可以了。比如存储数据d,如果两个相同的服务都去存储,就会出错。所以,在消费者这一方,kafka提出了group的概念。也就是消费者可以指定自身所属的group(可以指定多个group),每个group中只会有一个收到消息。示意图如下:


上图中,c1和c2是一个group a,c3、c4、c5、c6是一个group。topic p0的某个消息c1和c3进行了消息,其它未消费。

四、kafka的应用场景

     1、kafka作为消息系统。网上流传kafka是除zeroMQ之外最快的消息系统,这一点不知道真假。不过讲消息系统,我依然推荐它。

     2、kafka做数据存储。按照kafka的设计,做存储理论上挺好的。实际应用中,待观察。

     3、kafka作为流处理系统。虽然原来也可以通过生产者和消费者来进行流处理,但是比较复杂,这次kafka提供了方便的流处理api,如果有需求指的一试。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值