字节跳动的消息队列团队不仅要支撑公司内部消息队列系统的设计、开发和维护工作,还要解决诸多技术难题和痛点,例如如何稳定高效地处理海量数据、如何降低运维成本等。目前经过技术优化和迭代改进,字节跳动的消息队列平台支持弹性扩缩容、高吞吐、低延迟等特性,已经可以稳定承载每秒数十 T bytes 的流量。受限于篇幅,本系列文章将分为上下篇。 **本文将主要从字节消息队列的演进过程及在过程中遇到的痛点问题,和如何通过自研云原生...
对此本文将在接下来的内容中以 Kafka 和 RabbitMQ 为例分享消息队列选型的一些经验。消息队列即 Message+Queue,消息可以说是一个数据传输单位,它包含了创建时间、通道/主题信息、输入参数等全部数据;队列(Queue)... 我们紧接着面临的问题就是,我们应该在系统内部启动多少线程去从消息队列中获取消息。如果只是单线程去获取消息,那自然没有什么好说的。但是多线程情况,可能就会有问题。因为 RabbitMQ 在官方文档中声明了自己是不保...
分布式系统中必备的一个中间件就是消息队列,通过消息队列我们能对服务间进行异步解耦、流量消峰、实现最终一致性。目前市面上已经有 `RabbitMQ、RochetMQ、ActiveMQ、Kafka`等,有人会问:“Redis 适合做消息队列么?”在回答这个问题之前,我们先从本质思考:- 消息队列提供了什么特性?- Redis 如何实现消息队列?是否满足存取需求?今天,码哥结合消息队列的特点一步步带大家分析使用 Redis 的 List 作为消息队列的实现原理,并...
作者|字节跳动消息队列研发工程师-雷丽媛上文我们了解了在字节跳动内部业务快速增长的推动下,经典消息队列 Kafka 的劣势开始逐渐暴露,在弹性、规模、成本及运维方面都无法满足业务需求。因此字节消息队列团队... BMQ 的存储模型很好的解决了热点问题。即使 Partition 间数据大小或访问吞吐差别很大,被切割成 Segment 后都能均匀地分散在存储池中。 **❯** 接下来我们通过一个例子进一步感受 **池化存储** 的优势。...
在消息队列 RocketMQ版控制台中,您可以在线查询死信消息,并在消息被过期清理前,及时导出未正常消费的信息,排查消息生产或消费问题,避免消息丢失。 注意事项一个死信队列对应一个 Group ID, 而不是对应单个消费者实... true:消息已因过期而被删除,无法导出查看。 false:消息仍未过期,可以导出查看。 重新发送死信消息消息进入死信队列之后,说明该消息消费失败,消费者在正常情况下无法正确地消费该消息,例如遇到了网络断连、应用...
消息队列 Kafka版提供以下消息生产与消费相关的常见问题供您参考。 FAQ 列表Kafka 实例是否支持延迟消息? 如何查看正在消费消息的 IP 地址? 如何确定消息是否发送成功? Producer 建立的 Broker 连接数量是多少? Ka... 其中消费者信息一列即为正在消费消息的客户端 IP 地址。当消费者信息为空时,说明当前无客户端正在消费该分区,或者消费者使用的是第三方的 Kafka 客户端。 如何确定消息是否发送成功?客户端发送消息到 Kafka 实例之...
对此本文将在接下来的内容中以 Kafka 和 RabbitMQ 为例分享消息队列选型的一些经验。消息队列即 Message+Queue,消息可以说是一个数据传输单位,它包含了创建时间、通道/主题信息、输入参数等全部数据;队列(Queue)... 我们紧接着面临的问题就是,我们应该在系统内部启动多少线程去从消息队列中获取消息。如果只是单线程去获取消息,那自然没有什么好说的。但是多线程情况,可能就会有问题。因为 RabbitMQ 在官方文档中声明了自己是不保...
分布式系统中必备的一个中间件就是消息队列,通过消息队列我们能对服务间进行异步解耦、流量消峰、实现最终一致性。目前市面上已经有 `RabbitMQ、RochetMQ、ActiveMQ、Kafka`等,有人会问:“Redis 适合做消息队列么?”在回答这个问题之前,我们先从本质思考:- 消息队列提供了什么特性?- Redis 如何实现消息队列?是否满足存取需求?今天,码哥结合消息队列的特点一步步带大家分析使用 Redis 的 List 作为消息队列的实现原理,并...
作者|字节跳动消息队列研发工程师-雷丽媛上文我们了解了在字节跳动内部业务快速增长的推动下,经典消息队列 Kafka 的劣势开始逐渐暴露,在弹性、规模、成本及运维方面都无法满足业务需求。因此字节消息队列团队... BMQ 的存储模型很好的解决了热点问题。即使 Partition 间数据大小或访问吞吐差别很大,被切割成 Segment 后都能均匀地分散在存储池中。 **❯** 接下来我们通过一个例子进一步感受 **池化存储** 的优势。...
消息队列 Kafka版提供以下消息查询相关的常见问题供您参考。 FAQ 列表为什么查询不到消息? 消息超过保留时长之后,仍能被查询到 为什么消息被消费后仍保存在 Topic 中? 为什么查询不到消息?通过控制台查询消息时,如果出现消息成功发送,但查询不到的现象,通常由以下原因造成。 可能原因 说明 消息已过期删除 Kakfa 实例的 Topic 可设置消息保留时长,超出保留时长的消息将被后台自动删除。 开启了自动删除消息,且磁盘占用率高 ...
如果对数据可用性和可靠性要求较高,您可以选择使用一致性 hash 插件或 Quorum 队列来保障单节点故障场景的服务高可用。本文档介绍各种高可用方案的配置方式。 背景信息Classic 队列,即经典队列,是 RabbitMQ 中最常... 以应对单节点故障的情况下队列不可用的场景。Quorum 队列提供了数据冗余和高可用性的特性、对消息的可靠性保障更高。由于 Quorum 队列是 RabbitMQ 新引入特性,可能存在稳定性和一致性问题,请谨慎使用 Quorum 队列。...
成功接入消息队列 Kafka版之后,如果遇到消息消费异常,可以通过消息查询功能查看服务端的详细消息内容,确认服务端的消息详情是否与生产端或消费端完全一致,排查消息生产或消费问题。 背景信息消息队列 Kafka版提供以下方式查询消息详情。 按位点查询。查询指定 Topic 中、指定分区、指定位点对应的消息,适用于消息发送至的分区 ID 及消息位点非常明确的场景。 按时间查询。查询指定 Topic、指定分区或所有分区在指定时间范围内的消...
调用 ResendDLQMessageById 接口重新发送指定 MessageID 的死信消息。 注意事项请求频率:该接口请求频率限制为 100 次/秒;单用户请求频率限制为 20 次/秒。 使用说明消息进入死信队列之后,说明该消息消费失败,消费者在正常情况下无法正确地消费该消息,例如遇到了网络断连、应用故障等问题。在这种场景下,您可以查询、导出死信消息进行问题排查,当找到对应的解决方案、处理问题之后,在控制台中重新发送死信队列中的消息。此时该消...