kafka权威指南总结

第一章:初识kafka

  (1)kafka提供了一个MirrorMaker的工具,可以实现kakfa集群之间的消息复制,其内部包含了一个生产者和消费者,两者之间通过队列相连。

第三章:kafka生产者

  (1) kafka 写入的时候会创建ProducerRecord对象,其包含主题,分区,键,值信息。

    (2) 判断返回结果,acks=0,直接写入,不判断返回信息,不确定是否成功写入,acks=1,写入到leader节点就代表写入成功,acks=all,数据写入到全部副本,代表写入成功。

第四章:kafka消费者

  (1) 再均衡:分区的所有权从一个消费者转移到另一个消费者,它为消费者群组带来了高可用性和伸缩性
  (2) 消费者通过和群组协调器(broker)进行心跳机制来维持他们的从属关系,以及它们对分区的所有权关系,
    如果消费者停止发送心跳的时候足够长,会话就会过期,协调器认为它已经死亡,就会触发再均衡。
  (3) 使用一个实现PartitionAssignor的类来判断哪些分区应该属于哪个消费者
  (4) 消费者加入群组时,会向群组协调器发送一个JoinGroup请求,第一个加入群组的就是群主,群主从协调器那里获取群组的成员列表。
  (5) 群主把分配情况列表发送给协调器,协调器在把这些信息发给消费者,每个消费者只能看到自己的分配信息,只有群主可以看到全部消费者的消费信息。这个过程会在每次再均衡时发生

第五章:深入kafka

  (1)  kafka中的控制器,一个集群只有一个控制器,集群里第一个启动broker的通过在zookeeper里面创建一个临时节点/controller让自己成为一个控制器,
    其它节点在启动broker时也会创建这个临时节点,但是会收到节点已存在的异常,其它broker在控制器节点上创建zookeeper watch对象,这样就可以收到该节点的变更通知。
    当控制器关闭或者与zookeeper失去连接的话,其它broker通过watch对象知道控制器节点消失,他们会尝试创建控制器节点,
    第一个在zookeeper上创建控制器成功的broker会被选为新的控制器,其它的broker再次在新的控制器节点上创建watch对象。
  (2) kafka通过在zookeeper的临时节点上选举控制器,并且在节点加入/离开集群时通知控制器,控制器负责在节点加入或离开时,分区的首领选举,控制器通过epoch来避免脑裂。
  (3) 脑裂就是两个节点同时认为自己就是当前的控制器。
  (4) acks的响应是通过每个分区的首领进行返回的,如果是0或者1,首领会立即返回响应,
    如果是all,会将响应放在一个炼狱的缓冲区里面,直到所有的副本都复制了消息,首领才会将响应返回给客户端。
  (5) kafka通过零复制技术向客户端发送消息,直接把消息从文件系统缓存里发送到网络通道,而不需要经过任何缓冲区,避免了字节复制,也不需要管理内存缓冲区,从而获得更好的性能。
  (6) kafka的客户端在网络上使用的是二进制协议,broker之间的通信也是通过二进制协议。
  (7) 分区的分配是按照轮询的方式,包括一个机架,或者多个机架的情况,例如两个机架的话,6个broker,那么轮询的方式就是0,3,1,4,2,5的方式进行分配,
    避免一个机架宕的话,数据还可以进行使用,保证数据的可靠性。
  (8) 当添加新的分区的时候,会在日志存放的目录中,选择分区较少的进行存储,而不是看数据量。
  (9) kafka中提供了一个叫DumpLogSegment的工具,可以用来查看片段内容,它可以显示每个消息的偏移量、校验和、魔术数字节、消息大小和压缩算法,运行方法是
    ./kafka-run-class.sh kafka.tools.DumpLogSegments,如果使用了 --deep-iteration参数,可以显示被压缩到包装消息里的消息
  (10) 索引把偏移量映射到片段文件和偏移量在文件里的位置

第六章:可靠的数据传递

  (1)kafka的复制机制和分区多副本架构是kafka可靠性保证的核心。

原文地址:https://www.cnblogs.com/lyr999736/p/12420188.html