【教3妹学MQ】kafka的工作流程是怎么样的?

2哥:3妹,干嘛呢,要不要出去吃大餐?
3妹:在学习MQ呢,昨天你不是教了我消息队列的使用场景有哪些?嘛。我想再系统学习下MQ的工作流程是怎样的。
2哥:不错嘛,作为一个有追求的程序媛,就是不仅要知其然,还要知其所以然。
3妹:恩,向2哥大神看齐~
2哥:哈哈,说的我都不好意思了,我也有很多不懂的。只是工作时间长,经验比你丰富一些。
3妹:2哥,kfaka的工作流程是怎样的?你给我讲讲呗
2哥:emm, 肚子饿了,等我吃饱了再说。
3妹:午饭时间还早,先给我讲讲,呆会儿请你吃大餐。
2哥:好呀好呀,不许反悔啊。

                                    讲课

1.首先一个kafka集群有很多个kafka的服务器,每个kafka服务器就是一个broker,每一类消息有一个topic,生产者将一个消息发送给broker。

2.每个topic会有一个或者多个分区,broker根据分发机制将这个消息分给这个topic下的某个分区的leader,

分发机制:

  • 1.发的消息指定了分区就发到特定分区下
  • 2.指定了key,就根据murmur2 哈希算法对key计算得到一个哈希值,将哈希值与分区数量取余,得到分区。
  • 3.没有指定分区,也没有指定key,那么就根据一个自增计数与分区数取余得到分区,这样可以让消息分发在每个分区更加均匀。

3.每个分区就是一个目录,目录名是topic+分区编号,在收到消息后会将消息写入到日志文件中,如果一个分区的消息都有存放在一个日志文件中,那么文件会比较大,查询时会比较慢,而且也不便于之后删除旧的消息。所以每个分区对应多个大小相等的segment文件,每个segment的名称是上一个segment最后一条消息的offset,一个segment有两个文件,一个是.index文件,记录了消息的offset及这条消息数据在log文件中的偏移量。一个是.log文件,实际存储每个消息数据,每条消息数据大小不一,每条消息数据包含offset,消息体大小,消息体等等内容。查的时候根据offset先去index文件找到偏移量,然后去log文件中读。

具体的segment切分有很多个触发条件:

  • 当log文件>log.segment.bytes时切分,默认是1G。
  • 或者是segment文件中最早的消息距离现在的时间>log.roll.ms配置的时间,默认是7天。
  • 或者是索引文件index>log.index.size.max.bytes的大小,默认是10M。)

4.分区leader将消息存储到日志文件中后还不能算是写成功,会把消息同步给所有follower,当follower同步好消息之后就会给leader发ack,leader收到所有follower返回的ack之后,这条才算是写成功,然后才会给生产者返回写成功。(依据ACK配置来决定多少follower同步成功才算生产者发送消息成功)

5.消费者读数据时就去分区的leader中去读,一个消费者可以消费多个分区,但是一个分区只能一个消费者来消费,默认消费者取完数据就会自动提交,一般会关闭自动提交,消费者消费成功后,进行手动提交,分区的offset才会向后移动。(默认是会自动提交,一般会关闭自动提交)

注意事项:

1.replication.factor>=2,也就是一个分区至少会有两个副本。

2.min.insync.replicas默认是1,leader至少要有一个follow跟自己保持联系没有掉线。(这个配置只有在ack为all或者-1时有用,也就是ack为all也只是要求生产者发送的消息,被leader以及ISR集合里面的从节点接收到,就算所有节点都接收到了。)

3.一般设置了ack=all就不会丢数据。因为会保证所有的follower都收到消息,才算broker接收成功,默认ack=1。

4.retries=,生产者写入消息失败后的重试次数。

5.每个partition有一个offset,

6.生产者ACK配置:

1(默认) 数据发送到Kafka后,经过leader成功接收消息的的确认,就算是发送成功了。在这种情况下,如果leader宕机了,则会丢失数据。

0 生产者将数据发送出去就不管了,不去等待任何返回。这种情况下数据传输效率最高,但是数据可靠性确是最低的。

-1 也就是all,producer需要等待ISR中的所有follower都确认接收到数据后才算一次发送完成,可靠性最高。

AI大模型学习福利

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。


因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

四、AI大模型商业化落地方案

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量



 

### Kafka工作流程详解及运行机制 Kafka 是一个分布式流处理平台,其核心功能是通过发布-订阅模式实现消息的高效传递。以下是 Kafka工作流程和运行机制的详细解析。 #### 1. 分区与存储 Kafka 中的消息被组织成主题(Topic),每个主题可以进一步划分为多个分区(Partition)。分区的设计使得 Kafka 能够支持高吞吐量和水平扩展[^4]。 物理上,每个分区对应一个文件夹,该文件夹存储了所有的消息及其索引文件。例如: ```bash drwxrwxr-x. 2 upuptop upuptop 4096 8月 6 14:37 first-0 drwxrwxr-x. 2 upuptop upuptop 4096 8月 6 14:35 first-1 drwxrwxr-x. 2 upuptop upuptop 4096 8月 6 14:37 first-2 ``` 每条消息在分区中都有一个唯一的偏移量(Offset),用于标识消息的位置。Kafka 提供了两种策略来删除旧数据:基于时间和基于大小[^4]。 #### 2. 生产者(Producer) 生产者负责将消息发送到 Kafka 的特定主题。生产者可以选择将消息发送到特定分区或让 Kafka 自动分配。为了提高性能,生产者通常会批量发送消息,并支持压缩以减少网络传输开销。 #### 3. 消费者(Consumer) 消费者通过拉取(Pull)模式从 Kafka 中读取消息。这种设计简化了 Broker 的复杂性,同时允许消费者自主控制消费速率[^5]。消费者可以按照以下方式操作: - **批量消费**:一次性拉取多条消息。 - **逐条消费**:逐条拉取消息并处理。 - **提交方式**:消费者可以选择手动提交或自动提交偏移量,从而实现不同的传输语义(如至少一次、至多一次或恰好一次)。 #### 4. 分区副本与容错机制 Kafka 为每个分区维护多个副本(Replica),其中一个副本作为 Leader,其余为 Follower。Leader 负责处理所有读写请求,而 Follower 则异步复制 Leader 的数据。当 Leader 出现故障时,Kafka 会通过内置的选举机制自动选择一个新的 Leader,确保服务的连续性[^2]。 #### 5. 消费者组(Consumer Group) 多个消费者可以组成一个消费者组(Consumer Group),共同消费同一个主题的消息。Kafka 会根据分区数量和消费者数量进行负载均衡,确保每个分区只由一个消费者消费。如果某个消费者失败,其他消费者会重新平衡分区的消费任务[^2]。 #### 6. 数据复制与跨数据中心同步 Kafka 提供了多种工具来实现数据的冗余和地理位置分布。例如: - **MirrorMaker**:用于在不同数据中心之间复制 Topic。 - **Kafka Connect**:支持与其他系统(如数据库、文件系统等)集成,实现数据的摄取与导出[^2]。 #### 7. 实时处理与分析 Kafka Streams 和第三方流处理框架(如 Apache Storm 和 Spark)可以对 Kafka 中的数据进行实时处理和分析。这些工具能够帮助用户构建复杂的流处理应用程序[^1]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值