kafka

kafka消息队列

  使用消息件:肖峰,解耦和,扩展,异步

  kafaka是一个分布式的消息引擎

  支持发布/订阅消息

  多个分区,提高并发能力

  消息持久化到磁盘

  topic主题

       Kafka通过topic对消息进行归类。每一个topic下有多个不同的分区,每一个分区再物理位置上对应一个文件夹,存储这个分区的消息。文件夹命名topicname_parationIdnex

  文件夹里面包括消息的log文件和消息的索引文件,使得kafaka的吞吐率可扩展提升

  partition分区

  分一个分区的消息都是有序的,不变的。消息投递的时候,可以通过指定key,根据分区的策略将消息均匀的分发到不同的分区,达到负载均衡。

  投递kafka的消息在分区里面给消息都会分配一个offset偏移量。可以通过控制偏移量指定消息的位置,控制消息是否重复消费


  Broker  中间件kafak sever

      用来存放消息。kafka集群的每一个server都是一个broker


  Cousumer消费者

          消费者通过消费者组来标识自己。一个组内的消费者,是主从关系,不重复消费同一个分区,但是可以并发的消费不同分区的数据。

                                  不同组:同一个分区的消息可以重复消费


  kafka的高可用

     同步复制:投递到kafka的消息,需要所有的follow都写入完成,才认为消息写入成功,进行commit。这种影响了吞吐量

     异步复制:消息写入到leader后,记录到leader的log中就认为消息写入成功,commit。follow通过从leader上进行pull数据同步。这种提高吞吐。但是,但follow未完全复制,leader宕机了就会造成数据的丢失

    Isr副本同步机制

结合同步和异步的复制机制进行平衡高可用。生产者只把消息写入分区的leader,leader记录log后,所有的follow从leader进行数据的同步。follow完成同步后,会进行ack反馈给leader,

leader收到后,提交消息。Leader将增加HW并且向Producer发送ACK。这样就可以确保,leader挂了,只要有一个follow副本存在数据就不会丢失消息

lsr的动态更新

  leader会监控同步,当有一个follow宕机或者同步落后太多,会从同步副本里面移除。

  follow的反馈超过设置replica.lag.max.messages最大值,follow未在设定时间内发送ack给kafka

  监听follow的复制机制的是zk,通过改变zk的node节点,一旦发现有broker宕机,会删除node几点

  每个 broker 都会在 zookeeper 的临时节点 "/controller" 注册 watcher监听。当controller挂机,会删除controller,此时所有的broker会尝试重新新建controller path路径,然后,在新建的controller path中选择一个作为controller

当leader宕机的时候,从lru中选举新的leader

  如果leader宕机,lru中存在leader的完整最新数据的副本,就从lru中选择一个作为leader

                            lru中没有存在leader的最新副本,会随机选举一台作为leader,为了保证数据不丢失,会返回数据写入失败,数据重新写入

kafka如何保证消息的幂等性,不丢失

不丢失:

  写入的时候,消息提交成功保证了至少有一个副本

  sender的重试机制

  生产者在写入消息时,重写发送消息失败的方法onError方法,进行重写投递

  消费者在消费消息的时候,业务处理完毕,在进行消息的提交

不重复

    消费者进行幂等

你可能感兴趣的:(kafka)