Kafka(一): Kafka 入门

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/congcong68/article/details/71915679
 

一.Kafka 简介                                                       

        Kafka是一种分布式的发布(producer/订阅(consumer)的消息系统,并支持实时和离线的数据处理、可扩展、持久的。Kafka Server 是分布式部署(Broker)Kafka 的消息Topic存储在Kafka Server上并以Topic进行分类的,而且可以设置消息Topic)分区(partition),不会造成消息都存储在同一个磁盘从而导致磁盘空间慢的问题,同个partition里的数据是有顺序的(FIFO先进先出)。

              

 ---来自官方                               

       Kafkaproducer使用 push模式发布消息到对应Topicconsumer主动pull模式从Broker订阅消息,在这过程中producer consumer都需要zookeeper来保证消息的可靠性,zookeeper存储了一下meta信息。

二、Broker                                                                                                              

       Kafka 集群包含一个或者多个服务器,每个服务器都会标示为Broker。

     通过Server.properties中的broker.id 标识的。消息都会存储在这上面的。所以Broker数量(服务器)越多,集群的吞吐率就越高。


二、Topics and Logs                                                                                             

        不同的 producer生产的不同类的消费,Kafka通过Topics 区分不同类的消息,不同的Topics 的消息是分开存储的,存储在不同的Broker,每个Topics还可以进行分区存储(partition),分区数量可以一个或者多个组成的,在Server.properties配置log.dirskafka持久化数据存储的路径)数据目录下有对应的topic_name-partition_id文件。

          

              1)消息被append到对应的partition中,每个partition的消息是有顺序的,Partition中的每条Messageoffset来表示它在这个partition中的偏移量,这个offset不是该Messagepartition数据文件中的实际存储位置,offsetpartitionMessageidpartition是分段的,每个段叫LogSegment,包括了一个数据文件和一个索引文件。

          2KafkaTopics的消息,默认保留2天,两天过后会被删除,可以通过Server.properties配置log.retention.{ms,minutes,hours},也可以配置消息达到多大时被删除(log.retention.check.interval.ms)。默认保留2天,在这2天里,消息有没有被消费者消费,这个消息都存在,即使被消费了,这个消息也还是存在的,可以更改offset,重新消费消息。

       3KafkaTopic的存储消息,可以是分区的,并分布式的存储在不同的BrokerKafka的吞吐率可以水平扩展。

    4)Producer 和Consumer分开的处理,解耦

        

三、Producer 发布                                                    

 

   Producer 将消息发布到指定的Topic中。

     1)Topic多个分区时,消息根据SimplePartitioner的规则,采用hashcode做模运算,把消息保存到对应的分区。

        2)可以指定相同的key,发送到相同的分区,并保证消息有顺序性。

四、Consumer                                                                                                         

        消息者,每个consumer属于一个特定的consuer group(消费者组),如果一个消费者不指定group,则默认一个group,同一个topic的一个消息只能被同一个consuer group内的一个consuer 消费,但多个consuer group可同时消息同一个消息。consuer 在消费消息时,保存了offset,会记录在zookeeper上,顺序的读取时offset会增大。

            

五、Replication                                                                                                        

           每个partition有对应的leader,leader负责了消息的读写操作,leader分布在broker

      我们在创建Topics时会指定每个partition的副本数(default.replication.factor 配置),一个消息leader follower都有保存才算成功,leader如果挂了,Kafka保证读写可靠性,采用了ISR(in-sync replicas),新的LeaderISR中选举出来,ISR所有副本能够及时的复制Leader日志的节点,follower如果采用同步复制,follower都复制完这条消息才会commit,极大的影响了Kafka的吞吐率,Kafka采用了异步的批量的复制Leader日志,每个partitionLeader计算每个副本和它相对落后的数量和在规定时间内不会向Leader获取消息的会更新ISR并移除这些follower:

      1)request.required.acks 0:代表不需要任何确认; 1:代表需要leader replica确认 ;-1:代表需要ISR中所有进行确的。

      2)replica.lag.max.messages:数量  只要follower相对Leader落后的数量,就会从ISR移除

      3)replica.lag.time.max.ms:时间  规定时间内不会向Leader获取消息就会从ISR移除



猜你喜欢

转载自blog.csdn.net/congcong68/article/details/71915679