zoukankan      html  css  js  c++  java
  • kafka 的基本概念及使用场景

    本文为博主原创,未经允许不得转载:

    1. Kafka 的使用场景:

      1.日志收集:一个公司可以用Kafka收集各种服务的log,通过kafka以统一接口服务的方式开放给各种 consumer,例如hadoop、Hbase、Solr等。

      2. 消息系统:解耦和生产者和消费者、缓存消息等。

      3. 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过

        订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。

      4. 运营指标:Kafka也经常用来记录运营监控数据。

    2. 基本概念:

      kafka是一个分布式的,分区的消息(官方称之为commit log)服务。

      Broker :消息中间件处理节点,一个Kafka节点就是一个broker,一个或者多个Broker可以组成一个Kafka集群

      Topic : Kafka根据topic对消息进行归类,发布到Kafka集群的每条消息都需要指定一个topic

      Producer : 消息生产者,向Broker发送消息的客户端

      Consumer : 消息消费者,从Broker读取消息的客户端

      ConsumerGroup : 每个Consumer属于一个特定的ConsumerGroup,一条消息可以被多个不同的Consumer Group消费,

        但是一个Consumer Group中只能有一个Consumer能够消费该消息

      Partition : 物理上的概念,一个topic可以分为多个partition,每个partition内部消息是有序的

      

      producer通过网络发送消息到Kafka集群,然后consumer来进行消费,

      服务端(brokers)和客户端(producer、consumer)之间通信通过TCP协议来完成。

      

      Partition是一个有序的message序列,这些message按顺序添加到一个叫做commit log的文件中。

      每个partition中的消息都有一个唯一的编号,称之为offset,用来唯一标示某个分区中的message。

      提示:每个partition,都对应一个commit log文件。一个partition中的message的offset都是唯一的,但是不同的partition中的message的offset可能是相同的。

     

      每个consumer是基于自己在commit log中的消费进度(offset)来进行工作的。在kafka中,消费offset由consumer自己来维护

      一般情况下我们按照顺序逐条消费commit log中的消息,当然我可以通过指定offset来重复消费某些消息,或者跳过某些消息

      这意味kafka中的consumer对集群的影响是非常小的,添加一个或者减少一个consumer,对于集群或者其他consumer来说,都是没有影响的,

    因为每个consumer维护各自的offset。所以说kafka集群是无状态的,性能不会因为consumer数量受太多影响。

      kafka还将很多关键信息记录在zookeeper里,保证自己的无状态,从而在水平扩容时非常方便。

      为什么要对Topic下数据进行分区存储?

        1、commit log文件会受到所在机器的文件系统大小的限制,分区之后,理论上一个topic可以处理任意数量的数据。
        2、为了提高并行度。

      Producers

        生产者将消息发送到topic中去,同时负责选择将message发送到topic的哪一个partition中。通过 round­robin 做简单的负载均衡。
      也可以根据消息中的某一个关键字来进行区分。通常第二种方式使用的更多。

      Consumers

        传统的消息传递模式有2种:队列( queue) 和(publish-subscribe)
        queue模式:多个consumer从服务器中读取数据,消息只会到达一个consumer。 所有的consumer都位于同一个consumer group 下。
        publish-subscribe模式:消息会被广播给所有的consumer。所有的consumer都有着自己唯一的consumer group

      

      消费顺序

        Kafka比传统的消息系统有着更强的顺序保证。一个partition同一个时刻在一个consumer group中只有一个consumer instance在消费,
      从而保证顺序。consumer group中的consumer instance的数量不能比一个Topic中的partition的数量多,否则,多出来的consumer消费不到消息。

        Kafka只在partition的范围内保证消息消费的局部顺序性,不能在同一个topic中的多个partition中保证总的消费顺序性。

  • 相关阅读:
    WSS基础
    SPCAMLEditor1.0 publish
    关于代码调用SSP获取UserProfile出错的解决方案
    WSS Alert(邮件提醒) 定制
    MOSS字段编辑权限控制方案发布源码
    ListViewWebPart Code
    再议WSS RenderingTemplate
    Windows SharePoint Services Search和Office SharePoint Server Search的区别
    MOSS信息管理策略定制(MOSS custom policies)
    发布一个小工具SPCamlEditor
  • 原文地址:https://www.cnblogs.com/zjdxr-up/p/15000181.html
Copyright © 2011-2022 走看看