使用 AutoMQ 和 Tinybird 分析用户网购行为

前言

在当前竞争激烈的市场环境中,数据分析已成为企业实现差异化和精准营销的关键。通过分析用户行为数据,企业能够深入了解用户的习惯、偏好和行为模式,从而更精准地定位目标市场,制定个性化营销策略,并提供定制化推荐和服务。

在流处理和数据分析场景中,Kafka[1] 作为高吞吐量、低延迟的分布式消息系统,已成为这一领域的核心基础设施。而 AutoMQ[2] 基于云重新设计了 Kafka,将存储分离至对象存储,并在与 Apache Kafka 100%兼容的基础上,为用户提供高达 10 倍的成本优势和百倍的弹性。同样,Tinybird[3] 是一个强大的实时分析数据平台,它能够接收批处理和流式数据,并通过 API 支持 SQL 查询,帮助用户迅速构建高效的数据产品。

本文将通过分析用户订单信息的案例,深入探讨如何整合 AutoMQ 和 Tinybird,以优化用户订单信息的统计分析流程。借助这两个工具,我们能够实现实时用户数据收集、高效数据处理和直观数据展示,从而为业务提供更全面、准确的用户购买习惯和偏好,为精准营销提供有力支撑。通过阅读本篇文章,您将学会如何将网站的日志信息无缝导入到 Tinybird,并利用 Tinybird 进行用户行为数据的分析与可视化展示。

前置条件

  • 可用的 Tinybird 环境:确保您拥有一个正常工作的 Tinybird 环境。如果尚未拥有,可以参考其官方文档[4]获取更多信息。

  • 具备公网 IP 的 AutoMQ:需要一个具备公网 IP 并通过 SASL_SSL 协议启动的 AutoMQ 实例。由于 Tinybird 是基于 SaaS 模式构建的,它只能通过网络连接到 AutoMQ。出于用户信息安全的考虑,Tinybird 要求用户搭建的 AutoMQ 必须使用 SASL_SSL 安全协议启动,以保证数据传输的安全性和可靠性。SASL 用于客户端与服务器之间的身份验证,而 SSL 则确保数据在传输过程中的加密与保护。

第一步:使用 SASL_SSL 协议启动 AutoMQ

在启动 AutoMQ 并确保其使用 SASL_SSL 协议时,您应具备以下前置知识:

  1. 在 Linux 主机上以集群方式部署 | AutoMQ[5]

  2. AutoMQ SASL 安全身份认证配置教程[6]

  3. AutoMQ SSL 安全协议配置教程[7]

了解完以上内容后,本文将简要介绍启动可用的 AutoMQ 环境所需的关键配置文件,帮助您顺利完成配置。在操作过程中,请将相关文件路径替换为您实际资源所在的路径

1. 关于 Broker 的配置
1.1 进行 SASL 相关配置
listeners=BROKER_SASL://:9092,CONTROLLER_SASL://:9093
inter.broker.listener.name=BROKER_SASL
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.mechanism.controller.protocol=PLAIN
listener.name.broker_sasl.plain.connections.max.reauth.ms=10000
controller.listener.names=CONTROLLER_SASL

listener.name.broker_sasl.plain.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
   username="_automq" \
   password="automq-secret" \
   user__automq="automq-secret";
listener.name.controller_sasl.plain.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
   username="_automq" \
   password="automq-secret" \
   user__automq="automq-secret";

上述配置代表我们命名了两个监听器:BROKER_SASL、CONTROLLER_SASL,以及允许的安全机制为 PLAIN,并且为两个监听器分别创建了相同的用户 “_automq”,密码为 “automq-secret”

1.2 进行 SASL_SSL 相关配置
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL,BROKER_SASL:SASL_SSL,EXTERNAL:PLAINTEXT,CONTROLLER_SASL:SASL_SSL

通过对listener.security.protocol.map对配置,我们把两个监听器名称与安全机制 SASL_SSL 进行了映射。

1.3 进行 SSL 相关配置
# 如果要验证客户端则需要开启下面的设置
# ssl.client.auth=required
ssl.keystore.location=/root/automq/ssl/automq.space.jks
ssl.keystore.password=mhrx2d7h
# 私钥可以未加密形式提供,则无需配置密码
ssl.key.password=mhrx2d7h
#关闭主机名验证时设置以下参数
ssl.endpoint.identification.algorithm=

上述配置文件,我们指定了需要的密钥库,并且关闭了主机名验证。这里密钥库指定为从云厂商下载的 jks 文件。

2. 关于 Client 的配置

本篇文章的案例的数据集您可以在 Kaggle[8] 网站上免费下载,订单信息需要通过 Client 端发送至 Broker 的 Topic 中。

2.1 给客户端配置云厂商提供的根证书
  1. 从云厂商下载根证书

  2. 将根证书添加进客户机的信任库

通过以下命令将根证书添加进入信任库:

keytool -import -file /root/automq/ssl/DigicertG2ROOT.cer -keystore client.truststore.jks -alias root-certificate
2.2 client.properties 具体配置
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="_automq" password="automq-secret";
security.protocol=SASL_SSL
ssl.truststore.location=/root/automq/ssl/client.truststore.jks
ssl.truststore.password=123456
# 这里其实也可以直接用证书作为信任库,如下
# ssl.truststore.location=/root/automq/ssl/automq.space.jks
# ssl.truststore.password=xxxxx
sasl.mechanism=PLAIN
# 关闭主机名验证时客户端也必须设置以下参数
ssl.endpoint.identification.algorithm=

给客户端配置连接需要的账号密码,以及对应安全机制,并且提供客户端的信任库,以便服务端发送证书过来的时候进行证书的校验。

3. 配置文件启动 AutoMQ
bin/kafka-server-start.sh /root/automq/config/kraft/sasl_ssl.properties

第二步:为 AutoMQ 准备数据

现在我们有一些订单数据,信息包含了用户订单的 ID、订单创建时间、商品名称、商品条码、商品种类、收货地址、购买数量、商品单价、商品成本价、营业额、本单利润等信息,数据格式如下:

{
    "order_id": "141234",
    "order_date": "2019/1/22 21:25:00",
    "product", "iPhone",
    "product_ean": "5563319511488",
    "categorie": "Vêtements",
    "purchase_address": "944 Walnut St, Boston, MA 02215",
    "quantity_ordered": "1",
    "price_each": "700",
    "cost_price": "231",
    "turnover": "700",
    "margin": "469"
}

首先我们需要在 AutoMQ 集群中创建 Topic:

bin/kafka-topics.sh --bootstrap-server xxx.xxx.200.218:9092 --command-config /root/automq/bin/client.properties --create --topic automq-shop1

然后我们要通过脚本的形式模拟网站数据流入 AutoMQ 集群的 Topic,实现的 data.sh 脚本如下:

 #!/bin/bash

BOOTSTRAP_SERVERS="47.252.41.105:9092"
TOPIC="automq-shop"
CSV_FILE="orders.csv"
messages=""
MAX_LINES=1000
line_count=0

while IFS=',' read -r order_date order_id product product_ean categorie purchase_address1 purchase_address2 purchase_address3 quantity_ordered price_each cost_price turnover margin; do

    if [[ "$order_date" == "Order Date" ]]; then
        continue
    fi

    ((line_count++))

    if [[ $line_count -gt $MAX_LINES ]]; then
        break
    fi

    purchase_address="${purchase_address1},${purchase_address2},${purchase_address3}"
    purchase_address=$(echo $purchase_address | tr -d '"')  

    order_json="{\"order_date\":\"$order_date\",\"order_id\":\"$order_id\",\"product\":\"$product\",\"product_ean\":\"$product_ean\",\"categorie\":\"$categorie\",\"purchase_address\":\"$purchase_address\",\"quantity_ordered\":\"$quantity_ordered\",\"price_each\":\"$price_each\",\"cost_price\":\"$cost_price\",\"turnover\":\"$turnover\",\"margin\":\"$margin\"}"

    if [ -z "$messages" ]; then
        messages="${order_json}"
    else
        messages="${messages}#${order_json}"
    fi

done < "$CSV_FILE"

echo "$messages" | tr '#' '\n' | /Users/wzj/Desktop/app/automq/bin/kafka-console-producer.sh --broker-list "$BOOTSTRAP_SERVERS" --topic "$TOPIC" --producer.config client.properties

创建以上脚本并运行它,这样我们就做好了数据的准备工作。

第三步:将数据流导入到 Tinybird

Tinybird 不仅支持 Kafka 进行数据导入,还支持如:Confluent、Amazon S3、BigQuery 等形式的数据导入。下面我们将教您如何将 AutoMQ 的数据导入到 Tinybird 中。

创建数据源

首先我们需要进入官网提供的控制面板,如下:

点击菜单栏的 Data Sources 再点击创建数据源:

由于 AutoMQ 是对 Kafka 100% 兼容的,所以我们可以点击以 Kafka 形式导入数据:

点击创建一个新的连接,并且把我们创建的集群配置写入:

其中的 Key 和 Secret 是我们创建集群配置 SASL 的用户名和密码

配置完毕后我们就可以点击下一步,进行 Topic 的选择:

在下一步的配置中,我们可以选择一开始就获取所有的记录或者只获取创建数据源后新追加的记录,我们这里选择第一个:

完成配置后,Tinybird 会自动解析 Topic 的数据格式并将其按表格展示出来:

对于不符合我们预期的解析类型,我们也可以进行更改,方便我们后面进行 SQL 操作:

点击 Create Data Source 我们就成功的将 AutoMQ 的 Topic 与 Tinybird 进行了连接,接下来这个 Topic 上的数据都会被 Tinybird 接收到。数据源面板如下:

创建管道

Tinybird 提供了强大的 SQL 分析功能,可用于对数据进行过滤、聚合和连接等操作。我们可以通过创建管道来实现不同的 SQL 操作。

点击刚刚我们创建的数据源,在点击页面上的 Create Pipe 即可创建管道:

在管道页面,我们可以通过编写 SQL 语句进行数据过滤与分析,比如说我们想要对导入的订单数据进行销售总额与利润分析,在代码块中编写如下代码:

SELECT SUM(turnover) AS total_sales,
       SUM(margin) AS total_profit
FROM source

运行代码后产生效果如下图所示:

Tinybird 同样支持我们进行复杂的 SQL 编写,比如说我们想要知道哪个产品销量最高,我们可以这样写:

SELECT product, 
       SUM(quantity_ordered) AS total_quantity
FROM orders
GROUP BY product
ORDER BY total_quantity DESC
LIMIT 1

运行后效果如下:

现在我们成功地建立了 AutoMQ 与 Tinybird 的连接,并利用 Tinybird 支持的 SQL 进行了数据分析操作。

第四步:数据可视化

Tinybird 不仅提供数据接口,支持与 Grafana 等可视化平台的集成,还可以进行基本的数据可视化分析。如需了解如何使用其他平台进行可视化,请参考 Tinybird 提供的文档教程[9]。本次我们将使用 Tinybird 自身提供的可视化工具进行场景分析。

场景一:区域销售最高产品分析

我们想要通过分析不同区域的销售数据,识别出在特定区域最受欢迎的产品和类别。这有助于公司在不同区域优化库存分配,避免缺货或滞销,提高客户满意度和销售额。

比如说我们想要获取 Boston 地区的销售数据 ,我们可以编写出如下 SQL:

SELECT   
    SUBSTRING_INDEX(SUBSTRING_INDEX(purchase_address, ',', 2), ',', -1) AS region,  
    product,   
    SUM(quantity_ordered) AS total_quantity  
FROM   
    source  
GROUP BY   
    region, product
HAVING   
    region = ' Boston'  
ORDER BY   
    region, total_quantity DESC

通过运行所得如下:

点击右上角的 Create API Endpoint 再点击 Create Chart,我们就能进入创建图标的页面:

在这里我们可以选择 Bar List 图标格式,选择产品作为下标,得出可视化结果如下:

现在我们就可以针对 Boston 区域构建备货策略,确保有充足的库存来满足高需求,或者针对热销产品进行特定市场推广活动,例如折扣、赠品等,进一步提升销售。

场景二:地理位置销售分布分析

我们想要通过分析不同地理区域的销售情况,来识别主要市场在哪。了解哪些区域销售表现最好,可以帮助企业更清晰地定位其目标市场,并针对特定区域制定营销策略。

针对上述需求,我们可以编写出如下 SQL:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(purchase_address, ',', 2), ' ', -1) AS city,
       SUM(turnover) AS city_sales
FROM source
GROUP BY city
ORDER BY city_sales DESC

我们同样可以得到以下的可视化数据:

场景三:产品的月销量分析

我们想分析某产品的每月销量,可以识别出季节性销售高峰和低谷,便于企业针对季节制定营销策略;还可以了解产品在市场上的生命周期,有助于合理安排库存。

我们这以 iPhone 为例,根据需求写出如下 SQL 语句:

SELECT 
    DATE_FORMAT(order_date, '%Y-%m') AS month,
    SUM(quantity_ordered) AS total_quantity,
    SUM(turnover) AS total_sales
FROM 
    source
WHERE 
    product = 'iPhone'
GROUP BY 
    month
ORDER BY 
    month

通过可视化操作,我们可以得出下面这张表格:

总结

本文详细介绍了如何整合 AutoMQ 与 Tinybird 进行简单的数据分析操作,文中展示的分析仅作示例。如果您的数据点已经准备就绪,并提供必要的数据,可以尝试通过在官网学习更复杂的分析和转换逻辑,并加以实现。如有任何问题或需要帮助,请随时联系我们。

参考资料:

[1] Kafka: https://kafka.apache.org/

[2] AutoMQ: https://www.automq.com

[3] Tinybird: https://www.tinybird.co/

[4] Quick start Tinybird: https://www.tinybird.co/docs/quick-start

[5] Quick start AutoMQ: https://docs.automq.com/zh/automq/getting-started/cluster-deployment-on-linux

[6] AutoMQ SASL 安全身份认证配置教程:https://www.automq.com/zh/blog/automq-sasl-security-authentication-configuration-guide

[7] AutoMQ SSL 安全协议配置教程: https://www.automq.com/zh/blog/automq-ssl-security-protocol-configuration-tutorial

[8] Data Source: https://www.kaggle.com/datasets/vincentcornlius/sales-orders

[9] Consume API Endpoints in Grafana: https://www.tinybird.co/docs/guides/integrations/consume-api-endpoints-in-grafana

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/969910.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小米 R3G 路由器刷机教程(Pandavan)

小米 R3G 路由器刷机教程&#xff08;Pandavan&#xff09; 一、前言 小米 R3G 路由器以其高性价比和稳定的性能备受用户青睐。然而&#xff0c;原厂固件的功能相对有限&#xff0c;难以满足高级用户的个性化需求。刷机不仅可以解锁路由器的潜能&#xff0c;还能通过第三方固…

Python数据可视化 - Matplotlib教程

文章目录 前言一、Matplotlib简介及安装1. Matplotlib简介2. 安装Matplotlib 二、Matplotlib Pyplot1. Pyplot介绍2. Pyplot中方法介绍2.1 创建和管理图形2.2 绘制图形2.3 设置图形属性2.4 保存和展示 三、Matplotlib绘图标记1. 介绍2. 基本用法3. 标记大小与颜色4. 标记样式列…

DeepSeek 与网络安全:AI 驱动的智能防御

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 随着人工智能&#xff08;AI&#xff09;的快速发展&#xff0c;深度学习技术正渗透到多个领域&#xff0c;从医疗诊断到…

STM32——HAL库开发笔记19(串口中断接收实验)(参考来源:b站铁头山羊)

本实验&#xff0c;我们以中断的方式使得串口发送数据控制LED的闪烁速度&#xff0c;发送1&#xff0c;慢闪&#xff1b;发送2&#xff0c;速度正常&#xff1b;发送3&#xff0c;快闪。 一、电路连接图 二、实现思路&CubeMx配置 1、实现控制LED的闪烁速度 uint32_t bli…

开关电源实战(一)宽范围DC降压模块MP4560

系列文章目录 文章目录 系列文章目录MP4560MP4560 3.8V 至 55V 的宽输入范围可满足各种降压应用 MOSFET只有250mΩ 输出可调0.8V-52V SW:需要低VF肖特基二极管接地,而且要靠近引脚,高压侧开关的输出。 EN:输入使能,拉低到阈值以下关闭芯片,拉高或浮空启动 COMP:Compens…

网络IP地址冲突故障,快速解决方案!

由于网络被广泛运用&#xff0c;网络规模持续变大&#xff0c;对应的 IP 地址分配也越来越多&#xff0c;IP 地址冲突的情况日益严重&#xff0c;在一定程度上对网络的正常运行造成了影响。 要维护网络稳定、高效地运行&#xff0c;解决 IP 地址冲突的问题就成了网络管理里的一…

C++模拟实现二叉搜索树

目录 1.二叉搜索树概念 2.二叉搜索树的实现 2.1二叉搜索树的查找 2.2二叉树的插入 2.3二叉树的删除 3.所有代码 4.二叉搜索树的应用 5.二叉搜索树的性能分析 1.二叉搜索树概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二…

3D渐变柱状图

代码说明 数据准备&#xff1a; 数据可以是任意形式的矩阵&#xff0c;例如 5x7 的矩阵。 行标签 (rowLabels) 和列标签 (colLabels) 是可选的&#xff0c;如果不需要可以删除相关部分。 颜色定义&#xff1a; 使用自定义的蓝黄渐变色 (map)。 如果需要其他颜色&#xff0c;…

完美解决 error:0308010C:digital envelope routines::unsupported

查看专栏目录 Network 灰鸽宝典专栏主要关注服务器的配置&#xff0c;前后端开发环境的配置&#xff0c;编辑器的配置&#xff0c;网络服务的配置&#xff0c;网络命令的应用与配置&#xff0c;windows常见问题的解决等。 文章目录 windows电脑完美解决办法&#xff1a;设置说明…

Xilinx kintex-7系列 FPGA支持PCIe 3.0 吗?

Xilinx kintex-7系列资源如下图 Xilinx各系列的GT资源类型和性能 PCIe Gen1/2/3的传输速率对比 K7上面使用的高速收发器GTX最高速率为12.5GT/s&#xff0c; PCIe Gen2 每个通道的传输速率为 5 GT/s。 PCIe Gen3 每个通道的传输速率为 8 GT/s。 所以理论上硬件支持PCIe3.0&#…

支持列表拖拽嵌套,AI流式输出的多模态文档编辑器flowmix/docx: 全面升级

hi, 大家好, 我是徐小夕. 马上又到周五了, 最近也收到很多用户对 flowmix/docx 多模态文档编辑器的反馈&#xff0c;我们也做了一波新功能的升级&#xff0c;今天就和大家分享一下 flowmix/docx 多模态文档编辑器的最新更新. 演示地址: https://flowmix.turntip.cn/docx 以下是…

Mysql中使用sql语句生成雪花算法Id

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

聊聊 IP 地址和端口号的区别

在计算机网络中&#xff0c;两个基本概念对于理解设备如何通过网络进行通信至关重要。IP 地址和端口号是 TCP/IP 的典型特征&#xff0c;其定义如下&#xff1a;IP 地址是分配给连接到网络的每台机器的唯一地址&#xff0c;用于定位机器并与其通信。相反&#xff0c;端口号用于…

【线性代数】1行列式

1. 行列式的概念 行列式的符号表示: 行列式的计算结果:一个数 计算模型1:二阶行列式 二阶行列式: 三阶行列式: n阶行列式: 🍎计算行列式 计算模型2:上三角形行列式 上三角形行列式特征:主对角线下皆为0。 上三角形行列式: 化上三角形通用方法:主对角线下,…

问界M8细节曝光,L3自动驾驶有了!

文 | AUTO芯球 作者 | 雷慢 太惊喜了&#xff0c; 问界M8近距离实拍曝光了&#xff0c; 我看了一圈&#xff0c; 给大家扒出几个炸裂的信息&#xff0c; 注意看侧身这一堆传感器&#xff0c; 这可不是什么普通摄像头&#xff0c; 这一片传感器和和尊界S800那套一模一样&a…

支付宝 IoT 设备入门宝典(上)设备管理篇

相信不少朋友最近都被支付宝“碰一下”广告刷屏&#xff0c;“不用打开 APP 支付就碰一下”几个字一出简直自带BGM……其实“碰一下”就是支付宝 IoT 设备的一种&#xff0c;趁着热度还在&#xff0c;我会分为设备管理和设备经营上下两篇&#xff0c;简单介绍一下支付宝 IoT&am…

【Linux网络-网络基础】计算机网络背景+协议+OSI七层模型

一、计算机网络背景 网络相关概念 1.什么是网络&#xff1f; 网络是一种由多个节点&#xff08;如计算机、手机或其他电子设备&#xff09;通过通信线路或无线信号连接而成的系统。在网络中&#xff0c;信息可以通过这些节点进行传输和交换 2.独立模式 独立模式&#xff1…

VisionPro 划痕检测小练习

划痕检测,我这里用到的是Sobel算子和blob斑点匹配以及blob里面的形态学调整 Sobel 是一种在数字图像处理和计算机视觉领域广泛应用的算法&#xff0c;主要用于边缘检测 脚本展示 #region namespace imports using System; using System.Collections; using System.Drawing; …

盛铂科技 SMF106 低相位噪声贴片式频率综合器模块

在现代通信和电子设备领域&#xff0c;频率综合器作为关键组件&#xff0c;其性能优劣直接影响系统的整体表现。盛铂科技的 SMF106 低相位噪声贴片式频率综合器&#xff0c;以其卓越的性能和独特设计&#xff0c;成为众多高性能系统的选择。 一、频率覆盖范围广&#xff0c;步进…

DeepSeek 遭 DDoS 攻击背后:DDoS 攻击的 “千层套路” 与安全防御 “金钟罩”_deepseek ddos

当算力博弈升级为网络战争&#xff1a;拆解DDoS攻击背后的技术攻防战——从DeepSeek遇袭看全球网络安全新趋势 在数字化浪潮席卷全球的当下&#xff0c;网络已然成为人类社会运转的关键基础设施&#xff0c;深刻融入经济、生活、政务等各个领域。从金融交易的实时清算&#xf…