1. 生产、消费、消息类别、存储等等。
    2. > Kafka服务:
    3. > Topic 主题,Kafka处理的消息的不同分类
    4. > Broker 消息代理,集群中的一个服务节点称为一个broker,存储消息数据到硬盘中,每个topic都是有分区的。
    5. > Partition Topic物理上的分组,一个topicbroker中被分为1个或者多个partition,分区在创建topic的时候指定
    6. > Message 消息,是通信的基本单位,每个消息都属于一个partition
    7. > Kafka服务相关
    8. > Producer:消息和数据的生产者,向Kafka的一个topic发布消息。
    9. > Consumer:消息和数据的消费者,定于topic并处理其发布的消息。
    10. > Zookeeper:协调kafka的正常运行。

    Broker

    配置文件server.properties 
    
       1、为了减少磁盘写入的次数, 消息暂时buffer起来, 再flush到磁盘, 这样减少了磁盘IO调用的次数
    
         配置:Log Flush Policy
         #log.flush.interval.messages=10000   一个分区的消息数阀值
         #log.flush.interval.ms=1000
    
       2、kafka的消息保存一定时间(通常为7天)后会被删除
    
         配置:Log Retention Policy 
         log.retention.hours=168 
         #log.retention.bytes=1073741824
         log.retention.check.interval.ms=300000
    

    Producer

    配置文件:producer.properties
    
        1、自定义partition
    
            Producer也根据用户设置的算法来根据消息的key来计算输入哪个partition:partitioner.class
    
        2、异步或者同步发送
        配置项:producer.type
        异步或者同步发送
           同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据的通讯方式。  
        异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据的通讯方式
    
        3、批量发送可以很有效的提高发送效率
        Kafka producer的异步发送模式允许进行批量发送,先将消息缓存在内存中,然后一次请求批量发送出去
           具体配置queue.buffering.max.ms、queue.buffering.max.messages 默认值分别为5000和10000
    

    Consumer

    配置文件:consumer.properties
    
        1、每个consumer属于一个consumer group,可以指定组id。group.id
    
        2、消费形式:
           组内:组内的消费者消费同一份数据;同时只能有一个consumer消费一个Topic中的1个partition;一个consumer可以消费多个partitions中的消息。
         所以,对于一个topic,同一个group中推荐不能有多于partitions个数的consumer同时消费,否则将意味着某些consumer将无法得到消息。
           组间:每个消费组消费相同的数据,互不影响
    
        3、在一个consumer多个线程的情况下,一个线程相当于一个消费者。
           例如:partition为3,一个consumer起了3个线程消费,另一个后来的consumer就无法消费。
    
    (这是Kafka用来实现一个Topic消息的广播(发给所有的Consumer)和单播(发给某一个Consumer)的手段。
    一个Topic可以对应多个Consumer Group。如果需要实现广播,只要每个Consumer有一个独立的Group就可以了。
    要实现单播只要所有的Consumer在同一个Group里。用Consumer Group还可以将Consumer进行自由的分组而不需要多次发送消息到不同的Topic。)
    

    topic、partition、message

    1、每个partition在存储层面是append log文件。新消息都会被直接追加到log文件的尾部,每条消息在log文件中的位置称为offset(偏移量)
    
    2、每条Message包含了以下三个属性:
      1、offset 对应类型:long  此消息在一个partition中序号。可以认为offset是partition中Message的id
      2、MessageSize  对应类型:int32 此消息的字节大小
      3、data  是message的具体内容
    
    3、越多的partitions意味着可以容纳更多的consumer,有效提升并发消费的能力
    
    4、总之:业务区分增加topic、数据量大增加partition