惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
Scott Helme
Scott Helme
爱范儿
爱范儿
WordPress大学
WordPress大学
博客园 - 三生石上(FineUI控件)
阮一峰的网络日志
阮一峰的网络日志
博客园 - Franky
V
V2EX
腾讯CDC
博客园_首页
博客园 - 司徒正美
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
小众软件
小众软件
J
Java Code Geeks
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog
雷峰网
雷峰网
Stack Overflow Blog
Stack Overflow Blog
IT之家
IT之家
罗磊的独立博客
Recorded Future
Recorded Future
博客园 - 聂微东
O
OpenAI News
S
Secure Thoughts
Hacker News: Ask HN
Hacker News: Ask HN
S
Schneier on Security
Hacker News - Newest:
Hacker News - Newest: "LLM"
Y
Y Combinator Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Project Zero
Project Zero
宝玉的分享
宝玉的分享
K
Kaspersky official blog
N
Netflix TechBlog - Medium
T
The Exploit Database - CXSecurity.com
Google Online Security Blog
Google Online Security Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Webroot Blog
Webroot Blog
云风的 BLOG
云风的 BLOG
Simon Willison's Weblog
Simon Willison's Weblog
C
Check Point Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
L
LINUX DO - 热门话题
美团技术团队
L
Lohrmann on Cybersecurity

Kafka

Kafka 消息处理冲突问题 - V2EX kafka king 陆续也快有 100 个 star 了,虽然很少,但是也是对我的认可,感谢大家 - V2EX 求助一个 zookeeper 配置 acl, kafka 是否需要做相关修改的问题 - V2EX 2023 年基于 Kafka 做重试队列的最佳实践? - V2EX kakfa 生产者的 ack=all 的参数会受到 broker 的最小同步副本参数的影响吗 - V2EX kafka 的 producer 和 broker 的关系是什么? - V2EX kafka 性能问题: kafka 传递海量小数据的时候,需要合并数据发送吗 - V2EX 有无 kafka 八股文或者书籍推荐 - V2EX 有什么好用的 kafka 桌面客户端? - V2EX kafka Kraft 模式增加投票节点配置后启动报错 - V2EX kafka-console-consumer.sh 同时读取某个 topic 的所有 partition 能实现吗? - V2EX 请教一个使用 HAProxy 代理访问 kafka 集群的问题 - V2EX kafka stream 拓扑的几个疑问 在生产环境中,向 kafka 发送图片消息是否合适 - V2EX kafka 消费者平滑退出一般是怎么做的? 请教 kafka 独立消费者 如果崩溃了如何获取 offset? - V2EX 关于 kafka 丢数据 - V2EX 如何获取 KRaft Kafka 的 controller leader - V2EX 如何从 Kafka 消费的数据中取最大值存储? - V2EX Kafka Stream 拓扑结构可视化 - V2EX Kafka 数据同步 - V2EX 请教一下 kafka group 数量比较大对 kafka 性能影响大吗 - V2EX 为什么很多场景数据先写入 kafka 再写入 elastic,而不是直接写 elastic? - V2EX Golang Kafka Writer 消息被截断 - V2EX kakfa producer 发消息会堵塞么? kakfa 的 producer 阻塞该怎么查 - V2EX 请问一下实际业务中, kafka 的消费者组一般应用于什么场景? - V2EX kafka 多线程消费是否必须手动提交 offset/partion 才能避免竞争 - V2EX 求一个基于 kafka 的消息消费框架 - V2EX kafka 如何实现每 10 秒拉一次数据? - V2EX 蹲一个 Kafka 大神,新增 partition 没有引起消费组的 rebalance,偶现 - V2EX kafka 如何知道生产者的 IP? - V2EX Python 消费 ka-f-a-k 时无限挂起,如何定位原因 - V2EX Python 消费 kafka 时无限挂起,如何定位原因 - V2EX 关于 PHP Rdkafka 消费者性能讨论 - V2EX xshell 无法使用 kafka 命令行发送消息到 topic - V2EX [Kafka] 求助, 同一个服务如何组播消费 kafka 某个 topic 的消息呢? - V2EX kafka 非常非常非常难用 - V2EX 有什么办法可以让 kafka 消费者走代理么? - V2EX 如何在消息消费者多实例(Cluster)的情况下保证应用级别的精确分发? - V2EX 各位大佬, zookeeper 加了 digest , kafka 要怎么改配置啊? - V2EX Kafka 需不需要设置安全认证 - V2EX springboot 集成 kafka 广播式消费 - V2EX kafka 疑惑,为什么随着 topic 增加,性能会急剧下降 - V2EX 求 kafka 的 docker 镜像? - V2EX 有老哥知道怎么给 kafka 某个 topic 创建消费组 - V2EX 准备写个基于 kafka 的延迟队列, 有感兴趣的吗 - V2EX 问一个消息队列的问题 - V2EX 有同学在生产环境里用过 Apache Kafka 么?能否分享一下你踩过的坑? - V2EX Kafka 内存陡然降低问题 - V2EX
请问一下,多节点消费 kafka 如何做到串行消费
NoKey · 2024-08-27 · via Kafka

这是一个创建于 655 天前的主题,其中的信息可能已经有所发展或是发生改变。

就是有个场景,有个任务要处理,任务必须串行执行
为了保证任务下发后不丢失
打算借助 kafka 的持久化,把任务丢到 kafka 中
后台服务有多个节点,也就是多个节点在消费 kafka
怎么样才能做到串行消费 kafka 的消息呢?
就是说,多个节点排队消费,第一个节点拿到消息后,如果没处理完,其他节点不能继续消费
搞了好久都没实现
又不想用数据库存储然后定时读取的方式(这种方式肯定没问题)
想通过这个功能,学会 kakfa 的使用
请假一下各位大佬,基于 kafka 能不能实现这个想法呢?谢谢

第 1 条附言  ·  2024 年 8 月 28 日

统一回复一下,应该是我调试的时候搞错了,今天我重新梳理了一下配置,当前验证的场景如下:
把消息发送到 topic 下的同一个分区,多个同 groupID 的消费者去消费,只有一个消费者可以拿到消息,且,这个消费者没处理完消息之前,其他消息都会被阻塞,等待这条消息处理完,才会继续消费下一条消息。已满足当前使用。
谢谢大家的回复

  • Kafka
  • 串行
  • 消费

    32 条回复    2025-11-08 21:32:24 +08:00

    Trim21

    1

    Trim21      2024 年 8 月 27 日

    只用一个节点消费?

    kechx

    2

    kechx      2024 年 8 月 27 日

    进队列前对任务进行一个 hash ,有时序性的扔在一起

    7911364440

    3

    7911364440      2024 年 8 月 27 日

    给任务加个字增 id ,每个消费服务执行任务前校验一下顺序

    crysislinux

    4

    crysislinux      2024 年 8 月 27 日 via Android

    kafka 一个分区不就是顺序执行的么。你还想要啥

    MeiJiayun

    5

    MeiJiayun      2024 年 8 月 27 日 via iPhone

    指定 key ,key 相同会推送到相同分区,同一分区的消息有顺序

    dddd1919

    6

    dddd1919      2024 年 8 月 27 日

    给串行的每个节点定义一个 topic 和 topic 的串行顺序,每个节点执行器执行完成后把消息推送到下一个 topic

    kur0d3s

    7

    kur0d3s      2024 年 8 月 28 日

    要求单实例顺序执行了, 那消费者多实例的意义是啥...

    Wh1t3zZ

    8

    Wh1t3zZ      2024 年 8 月 28 日

    "多个节点排队消费,第一个节点拿到消息后,如果没处理完,其他节点不能继续消费"

    没看懂多个节点消费的意义是什么

    NoKey

    9

    NoKey      2024 年 8 月 28 日

    @Wh1t3zZ 因为服务自己是多节点部署的,启动起来,kafka 就订阅消费了。。。

    NoKey

    10

    NoKey      2024 年 8 月 28 日

    @crysislinux 消费节点是多个,我测试的,即便多个消费者在一个消费者组,第一个消费者拿到消息处理的过程中,第二条消息到来,也会被消费,这个时候,第一条消息和第二条消息就是并行在处理了

    NoKey

    11

    NoKey      2024 年 8 月 28 日

    @Trim21 主要是服务是多节点部署,启动起来自然开始订阅消费

    zt5b79527

    12

    zt5b79527      2024 年 8 月 28 日   ❤️ 2

    单个实例去消费不就完了,如果必须是多个实例,就去抢分布式锁,拿到锁的才能去消费

    frank1256

    13

    frank1256      2024 年 8 月 28 日

    多节点抢锁,抢不到锁的 commit offset 要回退的,因为你第二个节点虽然拿不到锁,但已经消费到数据了

    echoZero

    15

    echoZero      2024 年 8 月 28 日

    放同一个分区。之所有会出现多条消息并行处理,因为是批量拉取消费消息,这个是你的消费逻辑问题,看一下是不是消费逻辑并发处理拉取的消息了

    zdt3476

    16

    zdt3476      2024 年 8 月 28 日

    你给这个 topic 只分配一个 partition 就好了,这样多消费者就不起作用了

    MoYi123

    18

    MoYi123      2024 年 8 月 28 日

    kafka 在这起什么作用? rpc 调用就会导致任务丢失了?

    marunrun

    19

    marunrun      2024 年 8 月 28 日   ❤️ 3

    1. topic 单分区 ,多消费者, 这样再多消费者也就只有一个在工作。

    2. 多分区,多消费者,任务投递的指定 key ,这样同样 key 的任务在同一个分区,也是被顺序消费的。

    3. 分布式锁 , 抢到锁的去消费

    NoKey

    20

    NoKey      2024 年 8 月 28 日

    @Marinaaaa 我现在用的是第二种,指定生成者往指定分区发消息,消费者就算只有一个,也有问题:我在消费方法中加了 sleep 来模拟处理数据耗时,第一条消息还在 sleep 的时候,第二条消息到来,也会进入处理阶段,也就是消费者相当于多线程的,不断的在消费。不知道这种情况如何处理

    wwhontheway

    21

    wwhontheway      2024 年 8 月 28 日

    没看懂,你说的串行是什么? task 按顺序一个一个消费?
    ------------------------
    就是说,多个节点排队消费,第一个节点拿到消息后,如果没处理完,其他节点不能继续消费
    ------------------------
    这又是啥?这不是串行呀。这是 task lock 保证的

    zhhmax

    22

    zhhmax      2024 年 8 月 28 日

    @NoKey #20 你手动提交每条消息的 offset ,然后把消费的方法改成阻塞式,这样每次消费完再手动提交之后才会消费下一条消息。

    NoKey

    23

    NoKey      2024 年 8 月 28 日

    @wwhontheway 就是想知道 springboot+kafka ,能不能做成一个简单的串行处理队列😁

    R4rvZ6agNVWr56V0

    25

    R4rvZ6agNVWr56V0      2024 年 8 月 28 日

    创建一个专门用于处理这些串行任务的 Kafka 主题,然后:
    使用单一消费者实例,属于自己的消费者组
    使用 TransactionalId 来跟踪每个任务的进度
    实现一个轮询机制,定期检查任务是否已经完成,如果完成则提交 offset 并删除该任务
    可以考虑使用 Kafka Streams 或 KSQL 来简化实现这个业务

    csys

    26

    csys      2024 年 8 月 28 日

    你手动指定分区或者使用相同的消息 key ,这样所有消息都会被发送到同一个分区,而一个分区只会被分配给一个消费者,相当于你只有一个订阅到此分区的消费实例在消费这些消息,其它消费者都在空跑

    wysnxzm

    28

    wysnxzm      2024 年 8 月 28 日

    将任务分组保证同一组的任务被同一个消费者消费,该消费者保证自身所有任务串行执行
    这样可以在多消费者的同时保证串行

    vaynecv

    29

    vaynecv      2024 年 8 月 28 日

    启动的时候指定某一个实例进行消费,其他示例忽略此消息

    night98

    30

    night98      2024 年 8 月 28 日

    你是想 1 到 10 总共十条消息,无论如何都要保证按照 1 到 10 按顺序消费,不能出现 1 ,2 同时消费,然后再 3 ,4 同时消费的情况,是这个业务逻辑是吗?

    spring kafka 限制单次消费拉取的数据量,然后就是楼上那些说的,一起弄一下就 ok 了

    实际逻辑就是一次必须只能有一个人持有消息,持有后必须按顺序消费。

    tangproxy

    31

    tangproxy      2025 年 3 月 12 日 via Android

    @vaynecv 赞同,后台服务多实例,初始化的时候通过分布式锁确定订阅 topic 的实例。然后,补充一点,防止这个订阅了 topic 的实例宕机,后台其他实例监听分布式锁过期的订阅,redission 那个,再进行重新抢锁,订阅 topic 。如果过期时间比较长(默认 10 分钟)无法接受的话,可以再加个补偿,举个例子,管理后台服务的程序(运管)可能最先知道后台实例挂了,通知其他实例这个情况。

    siaronwang

    32

    siaronwang      2025 年 11 月 8 日

    topic 只有一个 partition 即可,你开多少个 Consumer 他都是串行。