第六届字节跳动青训营第十二课 | 青训营

89 阅读3分钟

消息队列kafka

使用场景:

一般是用在名片信息的消息处理当中。比如一些日志信息,会先发到kafka里面进行处理,再由kafka的各种下游对这些进行分期。 metrics数据:程序在运行当中对程序作出的状态采集。比如程序的qbs,对程序写入的耗时latency。

如何使用kafka:

创建集群,建立分区数量;新增topic;编写生产者逻辑,把hello world发送到topic当中;编写消费者逻辑,把写的hello world拉取出来进行一个业务处理。Topic:逻辑队列,不同topic可以建立不同的Topic来建立不同的业务数据。Cluster:物理集群,每个集群中可以建立多个不同的topic。Producer:生产者,负责将业务消息发送到不同topic中。Consumer:消费者,负责消费topic中的消息。ConsumerGroup:消费者组,不同组consumer消费进度互不干涉。

offset:

消息在partition内的相对位置信息,可以理解为唯一ID,在partition内部严格递增。在topic内部视角,一个topic会有多个分区。每一个partition内部都会存储不同的消息,对于每一条消息都会有唯一的offset。

replica:

每个分片有多个replica,leader replica将会从ISR中选出。如果leader所在的副本的机器发生了宕机,那即可以在ISR中选出一个副本重新成为leader,继续为生产者producer和消费者consumer服务。

数据压缩:

通过压缩,减少消息大小,目前支持snappy、gzip、lz4、zstd压缩算法。经过测试对于zstd这个算法,对于计算和压缩率上来说都是比较优秀的。 broker消息文件结构:在一个broker上会分配着一些partition的一些副本。副本最后都会以日志的形式log写入到磁盘上。对于副本不同的日志最终会切分成不同的有序的logsegment日志段。LogSegment也包括四种类型:.log(日志文件).index(偏移量索引文件).timeindex(时间戳索引文件)其他文件。

broker零拷贝:

对于broker 发送给consumer使用到了零拷贝的基础。其实是使用了系统调用。从磁盘把文件调用到内核空间之后把数据发送给网卡NIC buffer,网卡就可以直接发送给消费者进程,就不需要用到application buffet和socket buffer进行数据的拷贝。 consumer- high level自动分配 consumer group来说都会选取一台不同的broker来当作coordinator协调者,它的作用可以帮助某个consumer group去进行自动分配,这个过程在整个consumer中也叫做rebalance。

kafka-重启操作

我们安装集群需要做一个升级,如果我们重启的这个broker上面有一个leader节点,如果关闭了leader,它会从整个副本当中去选择出一个follower作为一个新的leader对外进行服务。如果关闭broker1,将会启动broker2,整个数据还在继续写入,所以b1和b2的数据有差距,所以b1要对b2的数据进行追赶。当数据同步完成要对leader进行回切。 通过这节课的学习我觉得Kafka就像一个高速、可靠的信息管道。它可以处理大量的数据流,并确保数据不丢失。比如,你有很多消息要发送给其他系统,但是你希望能够高效地传递,并且即使接收方暂时不在线也不会丢失。Kafka就像一个中间人,它接收消息并将其保存在自己的“队列”中,然后逐个发送给接收方。这种方式可以保证消息顺序和可靠性,同时还能够扩展到非常大规模的系统。所以,Kafka在大数据处理、实时数据分析和分布式系统中都有广泛应用。