@Alpacadh
2022-09-18T17:19:48.000000Z
字数 1718
阅读 239
基础架构
kafka
1、架构图
点击展开内容
- Producer(生产者):也就是发送消息的一方。生产者负责创建消息,然后将其发送到 Kafka。
- Consumer(消费者):也就是接受消息的一方。消费者连接到 Kafka 并接收消息,进而进行相应的业务逻辑处理。
- Consumer Group(消费组): 一个消费者组可以包含一个或多个消费者。使用多分区+多消费者方式可以极大提高数据下游的处理速度。 同一消费组中的消费者不会重复消费消息,同样的,不同消费组中的消费者消息消息时互不影响。Kafka 就是通过消费组的方式来实现消息 P2P 模式和广播模式。
- Broker:服务代理节点。Broker 是 Kafka 的服务节点,即 Kafka 的服务器。
- Topic:可以理解为一个队列,一个 Topic 又分为一个或多个分区。
- Partition(分区):Topic 是一个逻辑的概念,它可以细分为多个分区,每个分区只属于单个主题。 同一个主题下不同分区包含的消息是不同的,分区在存储层面可以看作一个可追加的日志(Log)文件,消息在被追加到分区日志文件的时候都会分配一个特定的偏移量(Offset)。
- Offset:是消息在分区中的唯一标识,Kafka 通过它来保证消息在分区内的顺序性,不过 Offset 并不跨越分区,也就是说,Kafka 保证的是分区有序性而不是主题有序性,即局部有序。
- Replication(副本):是 Kafka 保证数据高可用的方式,Kafka 同一 Partition 的数据可以在多 Broker 上存在多个副本,通常只有主副本对外提供读写服务,当主副本所在 Broker 崩溃或发生网络一场,Kafka 会在 Controller 的管理下会重新选择新的 Leader 副本对外提供读写服务。
- Record:实际写入 Kafka 中并可以被读取的消息记录。每个 Record 包含了 key、value 和 timestamp。
2、kafka分区的目的
- 分区对于 Kafka 集群的好处是:实现负载均衡。分区对于消费者来说,可以提高并发度,提高效率。
3、Kafka 如何实现消息有序性
- kafka 中的每个 partition 中的消息在写入时都是有序的,而且单独一个 partition 只能由一个消费者去消费,可以在里面保证消息的顺序性。但是分区之间的消息是不保证有序的。
4、Kafka 中 ISR、AR 代表什么
ISR(In-Sync Replicas) 副本同步队列
Producer 如何优化写速度?AR(Assigned Replicas) 所有副本
leader 会动态维护一个与其基本保持同步的 Replica 列表,该列表即为 ISR,每个 Partition 都会有一个 ISR,当 follower 从 leader 同步数据有一些延迟(包括延迟时间 replica.lag.time.max.ms 和延迟条数 replica.lag.max.messages 两个维度),任意一个超过阈值都会把 follower 剔除出 ISR, 存入 OSR(Outof-Sync Replicas) 列表,新加入的 follower 也会先存放在 OSR 中。而 AR = ISR + OSR。
5、Kafka 为什么这么快
Cache Filesystem Cache PageCache 缓存。
顺序写:由于现代的操作系统提供了预读和写技术,磁盘的顺序写大多数情况下比随机写内存还要快。
Zero-copy:零拷技术减少数据拷贝次数。
Batching of Messages(批量量处理):合并小的请求,然后以流的方式进行交互,直顶网络上限。
Pull(拉模式):使用拉模式进行消息的获取消费,与消费端处理能力相符。
6、Producer 如何优化写速度?
- 增加线程。
- 提高 batch.size。
- 增加更多 producer 实例。
- 增加 partition 数。
- 设置 acks=-1 时,如果延迟增大,可以增大 num.replica.fetchers(follower 同步数据的线程数)来调解。
- 跨数据中心的传输:增加 socket 缓冲区设置以及 OS tcp 缓冲区设置。