阿里云消息队列 Kafka-消息检索实践
简介: 本文章主要介绍消息队列使用过程中所遇到的消息丢失、重复消费等痛点问题的排查办法,以及消息队列 Kafka「检索组件」的场景实践,并对其关键技术进行解读。旨在帮助大家对消息队列 Kafka「检索组件」的特点和使用方式更加熟悉,以更有效地解决消息排查过程中所遇到的问题。
作者: Kafka&Tablestore
本文章主要介绍消息队列使用过程中所遇到的消息丢失、重复消费等痛点问题的排查办法,以及消息队列 Kafka「检索组件」的场景实践,并对其关键技术进行解读。旨在帮助大家对消息队列 Kafka「检索组件」的特点和使用方式更加熟悉,以更有效地解决消息排查过程中所遇到的问题。
场景痛点介绍
在消息队列的使用过程中,由于其分布式特性难免会遇到消息丢失、消息重传等问题。
- 例如在日志聚合场景中,通常是多个异构数据源生产数据到 Kafka 中以提供给下游的 Spark 等计算引擎消费。而当某些日志缺失时,由于消息数据的发送方式、数据结构等种类繁杂,导致难以直接从客户端的日志来排查。
- 再例如消息转发的过程中,消费端可能会重复消费到同样的数据,这就需要根据内容从消息队列中检索数据以判断消息是否重复生产,而消息队列通常只能按照分区和消费位点遍历扫描,并不能灵活的实现消息检索。
业内现有的消息队列产品都没有较好的工具和方式来实现对消息内容的检索,这将使得排查难度和投入成本大大增加。
Kafka 消息检索组件
检索组件介绍
消息队列 Kafka 「检索组件」是一个全托管、高弹性、交互式的检索组件,具备万亿级消息内容检索的秒级响应能力,旨在解决业内消息产品不支持检索消息内容的难题。消息队列 Kafka 「检索组件」是通过 Kafka Connector 将 Topic 中的消息数据转存到表格存储(Tablestore)中,基于表格存储的多元索引功能提供消息检索能力。能够支持通过消息的分区、位点、发送的时间范围等一个或多个条件组合检索,还支持根据消息 Key、Value 全文检索消息。
案例实践
案例背景
假设某运维团队需要监控线上集群的运行情况,采集进程级别的日志导入到 Kafka 中,下游使用 Flink 消费,实时计算各进程资源消耗情况。当在 Flink 中发现某个进程的某个时间段的日志数据丢失时,需要使用消息队列 Kafka 「检索组件」,基于消息 Value 和时间范围检索消息数据,判断日志是否已经成功推送到了消息队列 Kafka 中。
例如采集的日志数据为 JSON 结构,某一条日志数据格式为:
key = 276
value = {"PID":"276","COMMAND":"Google Chrom","CPU_USE":"7.2","TIME":"00:01:44","MEM":"8836K","STATE":"sleeping","UID":"0","IP":"164.29.0.1"}
开通消息检索
1. 首先需要登录到阿里云消息队列 Kafka 控制台中,选择对应的 topic,开通消息检索服务。

- 消息检索服务开通后,将自动创建一个 Tablestore 实例,之后将消息数据转存到 Tablestore,并创建索引提供消息检索能力。每一个 topic 对应了 Tablestore 中的一张数据表。可以在消息队列 Kafka 控制台上查看每个 topic 的消息检索组件详情。

消息检索实践
- 消息检索服务开通后,就可以使用消息中的多个搜索项检索消息,实现上述案例。例如指定一个时间范围,并且检索消息 Value 中包含 PID = 276 的消息。


- 返回结果示例


能力扩展
表格存储 Tablestore 介绍
表格存储 Tablestore 是基于底层飞天平台构建的结构化数据存储,能够提供千亿级规模数据存储、毫秒级数据检索的服务能力。消息队列 Kafka 转存消息到 Tablestore 后,支持通过 Tablestore 原生的数据访问方式来检索消息,Tablestore 支持更复杂的检索逻辑,同时支持通过 SQL 语法检索消息。下面列举两种消息检索方式:
多元索引搜索
- 登录到表格存储 Tablestore 控制台中,进入 Kafka 消息数据转存对应的 Tablestore 实例和数据表中,在索引管理页面选择多元索引搜索消息。

- 例如需要检索消息 Value 中包含 PID=276 或者 PID=277 的消息。

- 返回结果


SQL 检索消息
- 表格存储 Tablestore 支持基于 SQL 语法来检索消息,首先需要在消息转存的数据表上创建一张 SQL 映射表。


- 基于 Tablestore SQL 检索 PID=276 的消息。

总结
阿里云消息队列 Kafka 「检索组件」是消息队列领域率先支持交互式消息内容检索的组件,基于数据转存表格存储 Tablestore 提供消息检索服务能力,支持根据 Key、Value、分区等任意个条件自由组合检索消息,同时支持 Key、Value 全文检索消息,具备免开发、免运维、高弹性的特点。同时也可以直接通过表格存储 Tablestore 索引或者 SQL 来检索消息,极大地提高了日常排查消息存在或正确性的速度。
原文链接:https://click.aliyun.com/m/1000355948/
本文为阿里云原创内容,未经允许不得转载。
阿里云消息队列 Kafka-消息检索实践的更多相关文章
- 阿里云RocketMQ定时/延迟消息队列实现
新的阅读体验:http://www.zhouhong.icu/post/157 一.业务需求 需要实现一个提前二十分钟通知用户去做某件事的一个业务,拿到这个业务首先想到的最简单得方法就是使用Redis ...
- 为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么优点和缺点?
面试题 为什么使用消息队列? 消息队列有什么优点和缺点? Kafka.ActiveMQ.RabbitMQ.RocketMQ 都有什么区别,以及适合哪些场景? 面试官心理分析 其实面试官主要是想看看: ...
- 消息队列——kafka
原文:再过半小时,你就能明白kafka的工作原理了 会出现什么情况呢? 1.为了这个女朋友,我请假回去拿(老板不批). 2.小哥一直在你楼下等(小哥还有其他的快递要送). 3.周末再送(显然等不及). ...
- 分布式消息队列 Kafka
分布式消息队列 Kafka 2016-02-25 杜亦舒 Kafka是一个高吞吐量的.分布式的消息系统,由Linkedin开发,开发语言为scala具有高吞吐.可扩展.分布式等特点 适用场景 活动数据 ...
- 消息队列kafka
消息队列kafka 为什么用消息队列 举例 比如在一个企业里,技术老大接到boss的任务,技术老大把这个任务拆分成多个小任务,完成所有的小任务就算搞定整个任务了. 那么在执行这些小任务的时候,可能 ...
- ActiveMQ消息队列从入门到实践(4)—使用Spring JMS收发消息
Java消息服务(Java Message Service ,JMS)是一个Java标准,定义了使用消息代理的通用API .在JMS出现之前,每个消息代理都有私有的API,这就使得不同代理之间的消息代 ...
- Canal Server发送binlog消息到Kafka消息队列中
Canal Server发送binlog消息到Kafka消息队列中 一.背景 二.需要修改的地方 1.canal.properties 配置文件修改 1.修改canal.serverMode的值 2. ...
- (二)RabbitMQ消息队列-RabbitMQ消息队列架构与基本概念
原文:(二)RabbitMQ消息队列-RabbitMQ消息队列架构与基本概念 没错我还是没有讲怎么安装和写一个HelloWord,不过快了,这一章我们先了解下RabbitMQ的基本概念. Rabbit ...
- Knative 应用在阿里云容器服务上的最佳实践
作者|元毅 阿里云智能事业群高级开发工程师 相信通过前面几个章节的内容,大家对 Knative 有了初步的体感,那么在云原生时代如何在云上玩转 Knative?本篇内容就给你带来了 Knative 应 ...
- 基于Docker搭建分布式消息队列Kafka
本文基于Docker搭建一套单节点的Kafka消息队列,Kafka依赖Zookeeper为其管理集群信息,虽然本例不涉及集群,但是该有的组件都还是会有,典型的kafka分布式架构如下图所示.本例搭建的 ...
随机推荐
- RunOnWeb - 创建新协议,支持html调用本地可执行文件,支持浏览器互相调用
浏览器调用 exe ? Yes! 谷歌 Chrome 启动微软 Edge ? Yes! RunOnWeb 协议 创建新协议,支持html调用本地可执行文件,支持浏览器互相调用 [最新版 ...
- 【leetcode 1425. 带限制的子序列和】【矩阵幂快速运算】
class Solution { public int countVowelPermutation(int n) { long[][] matrix = new long[][]{ {0, 1, 1, ...
- CentOS 安装后必需所做的初始化操作
CentOS 安装后必需所做的初始化操作 #关闭SELinux sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config #关闭防火墙 sy ...
- 5G+云渲染:如何快速推进XR和元宇宙实现?
XR(扩展现实)领域正在以惊人的速度增长.目前,到 2024 年,一些专家表示这个行业的价值将达到 3000 亿美元. 这个行业发展如此迅速的部分原因是 XR 将在商业环境中的带来巨大利益.近年来,很 ...
- 记录--Vue中的$attrs你真的会用吗?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 先来看一个业务需求: 项目经常会遇到产品经理要求你做某组件一样的功能,还要在它的基础上增加东西.如何只用少量代码高效的二次封装组件呢? 例 ...
- Java freemarker 模板生成word动态表格
1.新建一个word文档 2.把调整完的word另存为xml格式: 3.使用文本编辑器打开 4.xml格式化XML 在线格式化 | 菜鸟工具菜鸟工具-XML 在线格式化..https://c.runo ...
- Babel解决ES6不能被所有浏览器解析问题
一.简介 1.ES6的某些高级语法在浏览器环境甚至是Node.js环境中无法执行. 2.Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行执行. 二.安装Babel ...
- ArrayList,LinkedList,Vector三者的区别
List 中元素是有序的,元素可以重复,因为该集合体有索引 ArrayList: 底层数据结构是数组,查询快,增删慢. 线程不安全,效率高. 当元素放满了后,默认以原长度的 50%+1 的长度加长集合 ...
- PyQt5 GUI编程(QMainWindow与QWidget模块结合使用)
一.简介 QWidget是所有用户界面对象的基类,而QMainWindow用于创建主应用程序窗口的类.它是QWidget的一个子类,提供了创建具有菜单栏.工具栏.状态栏等的主窗口所需的功能.上篇主要介 ...
- Vim 速查表 做记录 便于记忆
Vim 命令速查表 简体中文 • English 简介:Vim 命令速查表,注释化 vimrc 配置文件,经典 Vim 键盘图,实用 Vim 书籍,Markdown 格式,目录化检索,系统化学习,体系 ...