消息队列

延迟队列

Kafka 都有哪些特点?

  • 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。
  • 可扩展性:kafka集群支持热扩展
  • 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
  • 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)
  • 高并发:支持数千个客户端同时读写

Kafka 分区的目的?

分区对于 Kafka 集群的好处是:实现负载均衡。分区对于消费者来说,可以提高并发度,提高效率。

kafka 中的每个 partition 中的消息在写入时都是有序的,而且单独一个 partition 只能由一个消费者去消费,可以在里面保证消息的顺序性。但是分区之间的消息是不保证有序的。

Kafka 是如何实现高吞吐率的?

Kafka是分布式消息系统,需要处理海量的消息,Kafka的设计是把所有的消息都写入速度低容量大的硬盘,以此来换取更强的存储能力,但实际上,使用硬盘并没有带来过多的性能损失。kafka主要使用了以下几个方式实现了超高的吞吐率:

  • 顺序读写
  • 文件分段
  • 零拷贝
  • 批量发送
  • 数据压缩

日志结构存储(Log-Structured Storage):只追加(Append-Only)写入:所有消息按到达顺序追加到分区(Partition)的日志文件中,写入操作天然顺序。不可变性(Immutable):已写入的消息不可修改或删除,避免了随机更新或覆盖操作。

分段(Segment)机制:按大小或时间切分日志:每个分区的日志被拆分为多个固定大小的 Segment 文件(例如 1GB)。当前活跃的 Segment(如 00000000000000000.log)仅用于写入,旧 Segment 只读

Kafka 不支持减少分区数,但支持增加分区。

避免重复消费

在消息处理逻辑中引入去重机制。例如,可以使用消息的唯一标识符(如消息ID)在处理前检查是否已经处理过该消息,从而避免重复处理。

kafka保证一致性:

producer 级别:acks=all(或者 request.required.acks=-1),发生模式为同步 producer.type=sync

acks = 0意味着如果生产者能够通过网络把消息发送出去,那么就认为消息已成功写入 Kafka ,

acks = 1:意味若Leader在收到消息并把它写入到分区数据文件,在这个模式下,如果发生正常的Leader选举,生产者会在选举时收到一个异常

ISR机制

全部评论

相关推荐

08-21 23:29
已编辑
门头沟学院 运维工程师
1. git pull 默认执行 哪些 操作?2. 如何撤销最近一次提交(但保留更改到工作区)?3. 如果执行 git add .,会发生什么?6. 写一个 Shell 命令,实现以下功能:遍历 /var/log 目录下所有 .log 文件,将文件名和文件大小(MB)输出到 log_size.txt,按大小降序排列。7. 编写一个 GitLab CI 配置文件,实现以下流程:1. 代码提交时自动运行 make build2. 只有打 tag 时才会触发 make deploy8. 如何在 Jenkins 中配置一个定时构建任务每天凌晨 2 点执行?9. 如何优化一个耗时较长的 CI 流水线?请尽可能多地提出优化思路。10. 用 sed 命令批量替换项目中的所有 "DEBUG" 为 "INFO"编写一个 Python 程序:读取 input.txt,剔除其中所有 "remove me" 字符串,然后将处理后的内容写回原文件。filename = "input.txt"with open(filename, "r", encoding="utf-8") as f:content = f.read()content = content.replace("remove me", "")with open(filename, "w", encoding="utf-8") as f:f.write(content) 运维#
点赞 评论 收藏
分享
🐭🐭不想面试啦�...:哈哈哈哈,是hc稀缺是吧。一边稀缺,一边后端简历多到捞不出来
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务