KAFKA架构重温

kafka集群 sasl_ssl kafka集群架构_kafka集群 sasl_ssl

kafka架构组成部分:由kafka集群,zookeeper集群,生产者和消费者构成。其中zookeeper存储kafka相关元数据信息以及负责监控和维护kafka集群的健康状态。

kafka集群由服务实例Broker组成,每一个Broker只持有主题topic中的一部分数据称之为主分区数据,其复制分区以一种冗余的容错的方式存储到其他Broker中。

Topic是一类数据集的集合,其实就是一种record队列,每一个record中由一个offset(偏移量)记录读取和写入位置,每一个分区都是一个有序的持续的可追加的不可变record队列,并在kafka中以结构化日志文件commit log文件来存储的,且不管消息消费与否,都会有个默认的保留周期。

生产者负责生产数据,将消息发布到Topic主题中,生产者消息发布策略,当record的k不为空时,使用哈希取模的发布策略(key.hashCode % numPartitions);当record中的key为空时,使用轮询分区的方式进行消息的发布;手动指定record存储的分区序号。当生产者发布消息之后存储时会有一个ack机制,当ack机制设置为0时broker无需应答,当ack设置为1时及写入主分区不管复制分区是否写入成功,立即应答,当ack设置为all或者-1时表示数据发写入到主分区且同步到复制分区时才进行应答,当超过默认时长30s时进行retry重新将数据写入到主分区,此时必定会有一个问题就是造成主分区数据重复,为了解决这个问题引入幂等操作(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG, true)。生产者的批量发送,将多个Record存放一个缓冲区,当满足条件(缓冲区大小 | 逗留时间)时以批量的形式发送存放kafka集群;

消费者消费topic中的数据,由所属消费组进行操作,同组以同组一种负载均衡,不同组广播的方式进行数据的消费;当同组消费者出现故障时,会自动进行容错处理,将当前消费者所负责的分区均匀的笑给其他消费者进行处理;消费者有三种消费方式:只订阅,订阅一个到n个topic所有分区的所有数据;指定消费分区:订阅一个或者多个topic中的分区数据;手动指定分区消费位置:每一个消费者维护一个消费位置offset,可以手动设置offset做到重新消费或者跳过不感兴趣的数据;当消费者首次订阅时,有两种方式,latest和earliest,当设置为earliest时,如当前分区有已经提交的offset,从当前offset进行消费,若没有则从最后即最新产的生的数据进行消费;如果设置为earliest,如有已提交的offset,从当前offset进行消费,若没有,从当前分区的开头进行消费。

消费组的作用:用来组织消费者的一种方式,同组负载均衡不同组广播,记录同组消费者的消费者位置。不同的消费组,Topic数据会复制给所有的消费组,但是只能由消费组中的一个消费者进行数据的处理。同时维护组员中的消费位置