code学习

Kafka配置与架构体系(二)

作者:Solid带月

一Kafka配置文件

1、config文件下配置文件server.properties

Kafka配置与架构体系(二)

Kafka配置文件

broker.id:kafka集群区分每个节点的唯一标志符

log.dirs:kafka的数据存储路径

delete.topic.enable=true:设置是否可以删除topic,默认false不允许删除。

log.retention.hours:Kafka的数据保留的时间,默认是7天

log.segment.bytes:Log文件最大的大小,默认1g,如果log文件超过1g会创建一个新的文件

zookeeper.connect:Kafka连接的zk的地址

num.partitions:当前kafka服务partition个数,默认的为1

二、Kafka架构体系

1、kafka架构图

Kafka配置与架构体系(二)

Kafka集群

2、Kafka关键概念

Producer:消息生产者,向Broker发送消息的客户端。生产者可以批量发送消息,以此来提高发送效率。

Broker:Broker代表kafka服务实例,每个服务器上有一个或多个broker,每个kafka集群内的broker都有一个不重复的编号broke.id,生产者和消费者都需要跟这个broker建立一个连接后,才可以实现消息的收发。 多个broker组成kafka集群。

Topic:消息主题,可以理解为消息的分类,每个broker上都可以创建多个topic。

Partition:Topic的分区,每个topic可以有多个Partition ,分区的作用是做负载,提高kafka的吞吐量,如果一个topic中的消息太多,会存在并发负载的问题,所有的客户端都是在操作同一个topic,在高并发的场景下性能会大大降低。同一个topic在不同的分区的数据是不重复的,partition文件夹命名规则:topic-partition

Kafka配置与架构体系(二)

topic分区

Replication:每一个分区都有多个副本,副本的作用是做备胎。当主分区(Leader)故障的时候会选择一个备胎(Follower)上位,成为Leader。在kafka中默认副本的最大数量是10个,且副本的数量不能大于Broker的数量,follower和leader绝对是在不同的机器,同一机器对同一个分区也只可能存放一个副本(包括自己)。

Consumer:消费者,从Broker读取消息的客户端,是通过消费端的Pull模式拉取消息。

Consumer Group:如果一个Consumer处理不过来一个topic,我们再增加几个Consumer来帮助它消费处理,这样就组成了一个消费组。一条消息可以发送到多个不同的Consumer Group达到重复消费的目的,但是一个消费组中只能有一个Consumer能够消费该消息。在kafka的设计中同一个分区的数据只能被消费组中的某一个消费者消费,若多个Consumer消费同一个partition 会导致重复消费问题。

Consumer Offset:partition里的消息是顺序写入的,被读取之后不会被删除。如果Consumer挂了或者下次读取想要接着上次的位置读取消息,怎么办呢?我们可以对消息进行编号,用来标识一条唯一的消息。这个标志就叫做offset,中文叫做偏移量。offset记录着下一条将要发送给consumer的消息序号。这个数据是保存在kafka服务端, kafka把这个offsert保存到了一个__consumer_offsert的topic下 这个__consumer_offsert 有50个分区,通过将group的id哈希值%50的值来确定要保存到哪一个分区

Kafka配置与架构体系(二)

offset日志

Segment:partition中的消息数据是顺序写入到一个后缀.log的文件里面。如果一直写,会造成文件越来越大,这时候要检索数据的效率必然会降低。高性能的唯一方案就是——分片。所以把partition再做一个切分,切分出来的单位就叫做segment。

每个segment都至少有一个数据文件和2个索引文件:.log是生产数据文件.index 偏移量索引文件.timeindex 时间戳索引文件

触发文件分片条件: 第一中.log文件大小达到了规定值(默认1G)。第二种是根据消息的最大时间戳,和当前系统时间戳的差值达到了规定值(默认168小时)。第三种如果offset索引文件或者timestamp索引文件达到了一定的大小(默认10M),也会对segment进行拆分。

Kafka配置与架构体系(二)

segment文件

Zookeeper:保证系统的可用性,leader选举。

注:同一个broker下可以建立多个topic,每一个topic可以建立多个partition分区,但是这些分区的副本必须在其他broker上。若partition分区和他的副本分区在同一个broker,当服务故障,所有数据都将不可用,也无法实现数据高可用。

继续阅读