Kafka基本概念及ISR浅析

Kafka基本概念

kafka有哪些特点

分布式:支持消息分区
跨平台
实时性:数据支持实时处理,消息堆积能力很强
伸缩性:支持水平扩展

Kafka高性能的原因



1、顺序写:顺序写盘的过程,consumer顺序消费数据,但是不从盘中删除数据,避免随机写盘。阿里云支持rocket删除某条消息,有可能进行的是打标记转储的方式,而不是物理删除。
2、Page Cache空中接力:

  1. producer生产消息时,会使用pwrite()系统调用按偏移量写入数据,并且都会先写入page cache里。
  2. consumer消费消息时,会使用sendfile()系统调用,零拷贝地将数据从page cache传输到broker的Socket buffer,再通过网络传输。
  3. 同时,page cache中的数据会随着内核中flusher线程的调度以及对sync()/fsync()的调用写回到磁盘,就算进程崩溃,也不用担心数据丢失。
  4. 如果consumer要消费的消息不在page cache里,才会去磁盘读取,并且会顺便预读出一些相邻的块放入page cache,以方便下一次读取。
  5. 由此我们可以得出重要的结论:如果Kafka producer的生产速率与consumer的消费速率相差不大,那么就能几乎只靠对broker page cache的读写完成整个生产-消费过程,磁盘访问非常少,这个结论俗称为“读写空中接力”。

Kafka高性能之零copy

Page Cache过程:
Page Cache(页面缓存)是操作系统实现的一种主要的磁盘缓存机制/策略,以此减少磁盘IO操作,简单来讲就是把磁盘中的数据缓存到内存中,把对磁盘的访问变成对内存的访问,从而提高性能。

ISR 和 OSR 原理图

  1. 即时消息会被拉取到ISR 集合,滞后消息会被拉取到OSR集合,当OSR 进度追上Leader 副本之后,ISR则会拉取ORS中的滞后消息。
  2. ISR 主从同步 HW(高水位线) LEO(最后的日志记录位置)

    示例:

    主节点 将所有数据同步到 的所有从节点之后,消息才能被消费,例如,有三条数据,前两条数据ab 同步完成 所有主从节点ABC, c数据因为网络原因或者其他原因只同步了AB 两个节点,C节点中还没有同步到c数据,此时HW 只能拉取到ab 两条消息,c消息因为没有同步到C节点,所以没办法被消费,直到c消息同步到C节点之后,HW 则处于正常的水平,此时所有abc,三条数据则都能被消费。



Kafka生产者重要参数

acks:指定发送消息后,broker端至少有多少个副本接收到该消息,默认1
acks=0,不需要等待响应
acks=-1 acks=all  需要等待ISR中的所有副本都成功写入消息后才能够收到来自服务端的成功响应---min.insync.replicas=2

Kafka之消费者必要参数

bootstrap.servers  用于指定连接kafka集群所需的broker地址清单

key.deserializer 和 value.deserializer 发序列和参数

group.id 消费者所属消费组

subscribe 消息主题订阅,支持集合和正则表达式

assgin 只订阅主题的某个分区

Kafka 分区器(partitioner实际应用场景原理图

猜你喜欢

转载自blog.csdn.net/weixin_38305866/article/details/109308827