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

推荐订阅源

U
Unit 42
S
Securelist
小众软件
小众软件
WordPress大学
WordPress大学
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The GitHub Blog
The GitHub Blog
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 司徒正美
博客园 - Franky
Hugging Face - Blog
Hugging Face - Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
酷 壳 – CoolShell
酷 壳 – CoolShell
O
OpenAI News
Cloudbric
Cloudbric
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
TaoSecurity Blog
TaoSecurity Blog
MongoDB | Blog
MongoDB | Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
V
V2EX
PCI Perspectives
PCI Perspectives
T
Troy Hunt's Blog
Schneier on Security
Schneier on Security
P
Palo Alto Networks Blog
M
MIT News - Artificial intelligence
V2EX - 技术
V2EX - 技术
阮一峰的网络日志
阮一峰的网络日志
Hacker News - Newest:
Hacker News - Newest: "LLM"
G
Google Developers Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
The Last Watchdog
The Last Watchdog
The Register - Security
The Register - Security
腾讯CDC
N
News and Events Feed by Topic
C
Check Point Blog
爱范儿
爱范儿
T
Tailwind CSS Blog
Webroot Blog
Webroot Blog
P
Proofpoint News Feed
S
Schneier on Security
MyScale Blog
MyScale Blog
N
News | PayPal Newsroom
Recorded Future
Recorded Future
T
Tenable Blog
I
InfoQ
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Microsoft Security Blog
Microsoft Security Blog
Simon Willison's Weblog
Simon Willison's Weblog
Engineering at Meta
Engineering at Meta

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 他都是串行。