AutoMQ 集成 Debezium

Debezium2.7 数据同步 MySQL/Oracle -- AI生成 Debezium是Red Hat开源的一个工具,用于实时捕获多种数据源(包括MySQL、PostgreSQL、SQL Server、Oracle等)的变更数据,并将这些数据作为事件流输出到Kafka等消息中间件中。通过Debezium,可以实现数据的实时同步和变更数据捕获(CDC)。 阅读详情

前言

在现代企业中,数据处理需求的不断增长使得实时监控和响应数据库变化变得尤为重要。无论是电商平台的订单处理、库存管理,还是金融系统的交易监控,都需要对数据库中的变化进行实时捕捉和处理。这不仅能提高系统响应速度,还能在数据发生变化时及时采取相应的业务操作。

为了实现这一目标,本文将介绍如何使用 Debezium [1] 监测 MySQL 数据库的变化,并将这些变化事件发送到 AutoMQ [2] 中。AutoMQ 作为一种高效、低成本的流处理系统,具有高弹性和高可用性,是企业实时数据处理的理想选择。通过这种方式,企业可以实现订单变化、库存变化等功能,并且可以设置告警规则,实现自动化监控。下游服务可以消费这些消息,从而实时掌握数据库的变化,及时响应业务需求,优化系统性能,确保业务的连续性和稳定性。

AutoMQ 概述

AutoMQ 是一种基于云重新设计的流处理系统,它在保持与 Apache Kafka 100% 兼容的前提下,通过将存储分离至对象存储,显著提升了系统的成本效益和弹性能力。具体来说,AutoMQ 通过构建在 S3 上的流存储库 S3Stream,将存储卸载至云厂商提供的共享云存储 EBS 和 S3,提供低成本、低延时、高可用、高可靠和无限容量的流存储能力。

与传统的 Shared Nothing 架构相比,AutoMQ 采用了 Shared Storage 架构,显著降低了存储和运维的复杂性,同时提升了系统的弹性和可靠性。AutoMQ 的设计理念和技术优势使其成为替换企业现有 Kafka 集群的理想选择。通过采用 AutoMQ,企业可以显著降低存储成本,简化运维,并实现集群的自动扩缩容和流量自平衡,从而更高效地应对业务需求的变化。此外,AutoMQ 的架构支持高效的冷读操作和服务零中断,确保系统在高负载和突发流量情况下的稳定运行。它的存储结构如下:

Debezium 概述

Debezium 是一个开源项目,为捕获数据更改(Change Data Capture,CDC)提供了低延迟的流式处理平台。通过安装和配置 Debezium,您可以监控数据库的变化,并将这些变化事件转化为 Kafka 消息。Debezium 支持多种数据库作为数据源,包括 MySQL、PostgreSQL 和 MongoDB 等,确保只有已提交的更改才是可见的,因此应用程序无需担心事务或回滚的问题。另外,由于 Debezium 用持久化的、有副本备份的日志来记录数据库数据变化的历史,因此,你的应用可以随时停止再重启,而不会错过它停止运行时发生的事件,保证了所有的事件都能被正确地、完全地处理掉。

Debezium 利用 Kafka 和 Kafka Connect [3] 的持久性、可靠性和容错性,每个连接器监控一个上游数据库服务器,捕获所有的数据库更改,并将其记录到 Kafka Topics 中。这样,多个客户端可以独立消费同样的数据更改事件,而对上游数据库的影响降到最小。Debezium 的常见使用场景包括缓存失效、简化单体应用、共享数据库和数据集成等。通过 Debezium,企业可以实现对数据库变化的实时监控和处理,满足各种业务场景的需求,如实时数据同步和事件驱动架构。它的架构图如下:

debezium structure [4]

前提条件

  • 可用的 Docker 环境。

  • 一个可用的 AutoMQ 节点,用于接收数据变更的 events 消息。

  • 开放了 binlog 功能的 MySQL 数据库。

  • 可用的 Kafka Connect 服务,并且能够连接到 AutoMQ 节点。

  • 注册 Debezium MySQL 插件到 Kafka Connect 进行监听和转换数据变化的操作。

快速部署

部署 AutoMQ

可以参考 AutoMQ 官网文档进行搭建:快速开始 | AutoMQ [5]。你将得到 AutoMQ 的服务访问地址,例如:192.168.123.41:9092,之后会通过 Kafka Connect 与 AutoMQ 进行连接。

部署 MySQL

可以通过 Docker 快速部署和配置 MySQL,镜像为 Debezium 官方的提供的镜像,该镜像中包含一定的初始数据库表,能够简化部署过程。可以通过如下命令创建名为 “mysql” 的容器:

docker run -it --rm --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=debezium -e MYSQL_USER=mysqluser -e MYSQL_PASSWORD=mysqlpw quay.io/debezium/example-mysql:2.7
  • MYSQL_ROOT_PASSWORD:设置 root 用户的密码。

  • MYSQL_USER和MYSQL_PASSWORD:设置普通用户的用户名和密码

通过普通用户连接到 MySQL 客户端:

docker exec -it mysql mysql -u mysqluser -pmysqlpw

通过命令行工具验证数据,查看当前所有的数据库表:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| inventory          |
| performance_schema |
+--------------------+

mysql> use inventory;

mysql> show tables;
+---------------------+
| Tables_in_inventory |
+---------------------+
| addresses           |
| customers           |
| geom                |
| orders              |
| products            |
| products_on_hand    |
+---------------------+

部署 Kafka Connect

使用以下命令拉取 Kafka Connect 镜像并启动容器,注意需要指定 AutoMQ 服务的地址:

docker run -it --rm --name connect -p 8083:8083 \
  -e GROUP_ID=1 \
  -e CONFIG_STORAGE_TOPIC=my_connect_configs \
  -e OFFSET_STORAGE_TOPIC=my_connect_offsets \
  -e STATUS_STORAGE_TOPIC=my_connect_statuses \
  -e BOOTSTRAP_SERVERS=192.168.123.41:9092 \
  --link mysql:mysql quay.io/debezium/connect:2.7

参数描述:

GROUP_IDKafka Connect 集群的组 ID。
CONFIG_STORAGE_TOPIC用于存储连接器配置的 AutoMQ 主题。
OFFSET_STORAGE_TOPIC用于存储连接器偏移量的 AutoMQ 主题。
STATUS_STORAGE_TOPIC用于存储连接器状态的 AutoMQ 主题。
–link mysql:mysql连接到名为 mysql 的容器。
-e BOOTSTRAP_SERVERS=192.168.123.41:9092指定 AutoMQ 节点地址。

如果连接失败,请注意 AutoMQ 和 MySQL 服务是否成功启动,以及开放地址是否正确等问题。

创建并注册 Debezium MySQL 连接器

Debezium MySQL 连接器是作为 Kafka Connector 的插件来监测 MySQL 数据库中的数据变更的,因此这里可以通过 curl 的方式进行 MySQL 连接器的注册,可以执行如下命令:

# 进入某一文件夹下创建文件
cd /home
vim mysql-connector.json

Json 文件内容为:

{
  "name": "inventory-connector",
  "config": {
    "connector.class": "io.debezium.connector.mysql.MySqlConnector",
    "tasks.max": "1",
    "database.hostname": "mysql",
    "database.port": "3306",
    "database.user": "debezium",
    "database.password": "dbz",
    "database.server.id": "184054",
    "topic.prefix": "dbserver1",
    "database.include.list": "inventory",
    "schema.history.internal.kafka.bootstrap.servers": "192.168.123.41:9092",
    "schema.history.internal.kafka.topic": "schema-changes.inventory"
  }
}

使用以下命令将连接器配置文件提交到 Kafka Connect:

curl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" --data @mysql-connector.json http://localhost:8083/connectors/

成功响应内容如下:

HTTP/1.1 201 Created
Date: Mon, 05 Aug 2024 01:51:43 GMT
Location: http://localhost:8083/connectors/inventory-connector
Content-Type: application/json
Content-Length: 518
Server: Jetty(9.4.53.v20231009)

{"name":"inventory-connector","config":{"connector.class":"io.debezium.connector.mysql.MySqlConnector","tasks.max":"1","database.hostname":"mysql","database.port":"3306","database.user":"debezium","database.password":"dbz","database.server.id":"184054","topic.prefix":"dbserver1","database.include.list":"inventory","schema.history.internal.kafka.bootstrap.servers":"192.168.123.41:9092","schema.history.internal.kafka.topic":"schema-changes.inventory","name":"inventory-connector-new"},"tasks":[],"type":"source"}

验证数据变更捕捉

增删改数据库数据

通过在 MySQL 控制台中执行数据增删改操作,验证 Kafka Connector 是否能捕获到变化:

-- insert
INSERT INTO customers (first_name, last_name, email) VALUES ('John', 'Doe', 'john.doe@example.com');

-- update
UPDATE customers SET email='john.doe@newdomain.com' WHERE first_name='John' AND last_name='Doe';

-- delete
DELETE FROM customers WHERE first_name='John' AND last_name='Doe';

检验 AutoMQ 消息

由于 Kafka Connector 的日志不够明显,这里可以选择更加明显的方式验证数据变更的捕获:通过检查 AutoMQ 中的 Topic 数据来验证是否捕获成功。而验证 Topic 数据可以通过脚本或者可视化的监控工具查看,具体操作可以参考下面的内容。

通过 Kafka 脚本检测

获取 AutoMQ 项目二进制包: Github Releases [6],解压之后,在项目根目录下执行脚本命令,这条命令将获取到 customers 表的数据变化情况:

bin/kafka-console-consumer.sh --bootstrap-server 192.168.123.41:9092 --topic dbserver1.inventory.customers --from-beginning

注意 AutoMQ 服务地址的替换。

结果如下:

通过可视化工具检测

可以通过各种可视化工具查看 AutoMQ 节点状态,比如 Redpanda Console [7]、Kafdrop [8] 等。这里以 Redpanda Console 为例,可以查看当前 AutoMQ 节点的所有 Topics 数据以及详细信息等。具体的 Redpanda Console 部署教程可以参考 AutoMQ 官方文档:Redpanda Console | AutoMQ [9]。

可以看到,这里展示了连接器监测的所有的数据库表,数据库和连接器的配置文件、偏移量以及每张表都对应一个 Topic。

可以查看详细的数据变化信息,比如对 customers 的更新操作:

你可以通过使用更多自定义的数据更新 SQL 来验证数据的捕获情况。

清理环境

可以通过执行如下命令,快速清理 Docker 环境:

docker stop mysql connect

由于启动时指定了 --rm 参数,因此一旦容器停止就会被删除。

总结

通过本文的介绍,我们探讨了如何使用 Debezium 监测 MySQL 数据库的变化,并将这些变化事件发送到 AutoMQ 中进行处理。通过部署 MySQL 和 Kafka Connect,并配置 Debezium MySQL 连接器,企业能够实现对数据库变化的实时监控和处理,满足订单变化、库存管理等业务需求。AutoMQ 的高效性和弹性,以及 Debezium 的低延迟和可靠性,使其成为企业实时数据处理的理想选择。针对监听数据变化获取事件消息,有更多可扩展性可以去探索,可以参考:Debezium [10]。

引用

[1] Debezium: https://debezium.io/

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

[3] Kafka Connect: https://docs.confluent.io/platform/current/connect/index.html

[4] Debezium Structure: https://docs.redhat.com/zh_hans/documentation/red_hat_integration/2023.q2/html/debezium_user_guide/description-of-debezium-architecture

[5] 快速开始 AutoMQ: https://docs.automq.com/zh/automq/getting-started

[6] Github Release: https://github.com/AutoMQ/automq/releases

[7] Redpanda Console: https://redpanda.com/redpanda-console-kafka-ui

[8] Kafdrop: https://github.com/obsidiandynamics/kafdrop

[9] Redpanda Console | AutoMQ: https://docs.automq.com/zh/automq/integrations/kafka-ui/redpanda-console

[10] Debezium: https://debezium.io/

Debezium系列之:Debezium 异步引擎 Debezium 提供了一种从项目一开始就直接在 Debezium 内运行连接器的方法。随着时间的推移,它的提供方式已经发生了变化,并且仍在不断发展。本文将描述这方面的另一个演变步骤 - Debezium 引擎的新实现。 阅读详情

相关推荐

一、Debezium介绍

Debezium 是一个用于变更数据捕获的开源分布式平台。启动它,将其指向您的数据库,您的应用程序可以开始响应其他应用程序提交到您的数据库的所有插入、更新和删除操作。Debezium 耐用且快速,因此您的应用程序可以快速响应并且不会错过任何事件,即使出现问题。 上面是官方介绍,我用翻译软件直接翻译的,简单来说,这个开源项目就是可以监控到数据库的变化,包括DDL和DML变更,当然目前DDL的变更仅支持做基本的解析,例如分区表,外键,约束等均不支持,但是你可以进行扩展开发。 .........

al229的博客 1571

AutoMQ:云原生 Kafka 解决方案,降低10倍成本100%完美兼容

AutoMQ 重新设计了 Kafka 的架构,基于云的基础设施,将存储分离至对象存储,实现了 Apache Kafka100% 的兼容性。它不仅提供了10 倍的成本优势,还带来了百倍的弹性,极大地提升了扩展性和性能。与传统的 Kafka 对比,AutoMQ 通过创新的存算分离架构,减少了运维复杂度,并充分利用了云环境中的共享存储特性。官网:https://www.automq.com/zhAutoMQ 通过云原生的架构优化,显著提升了 Kafka 的弹性和性能,并大幅降低了成本。

jast 1675

安信可TB蓝牙模组系列 实战Ble Mesh智能照明系统搭建

本文详细介绍了如何使用安信可TB蓝牙模组系列搭建Ble Mesh智能照明系统。从硬件准备、固件烧录到手机APP组网全流程,提供了实战步骤和优化建议,特别适合智能家居开发者入门。Ble Mesh的自组网能力解决了蓝牙传输距离限制,实现全屋灯光智能控制。

weixin_30856725的博客 352

Debezium是什么

Debezium是什么 Debezium是一个用来捕获数据库数据变更的分布式服务,你的应用可以看到这些数据变更,以及处理他们。Debezium以更改事件流的形式记录每张表的行级变更。 然后应用可以以事件流产生的顺序读取事件流变更记录。 目前支持的Source Connectors是Mysql,MongoDB,PostgresSQL、Oracle、SQL Server、Db2、Cassamdra、Vitesss。 目前Cassandra、Vitess处于孵化阶段。 说明:孵化连接器发版用于预览目的,对于孵

fengfengzai0101的博客 1万+

Arduino Uno R3开发板系列学习教程(番外篇:USB驱动安装与疑难排解)

本文详细介绍了Arduino Uno R3开发板USB驱动安装与疑难排解的完整指南,特别针对国产克隆版常见的CH340驱动问题提供解决方案。从识别开发板类型到Windows/Mac系统驱动安装步骤,再到常见问题排查与高级排错技巧,帮助开发者快速解决连接问题,确保程序烧录顺利进行。

weixin_29182481的博客 583

避免bank conflict的使用共享内存的矩阵转置。及其循环展开。转置前后都是行主序,中间共享内存中是列主序

为了避免bank conflict,可以使用padding的方式将数组中的每一行各自占据一个bank,这样每个线程读取不同行的数据时就不会发生bank conflict。padding的方式是在每行数据后面添加一定数量的空数据,使得每行的字节数恰好是bank的整数倍,这样就能保证每行数据各自占据一个bank。具体来说,当一个线程访问共享内存中的一个元素时,GPU会根据该元素在共享内存中的地址计算出其所在的bank,然后将该元素从该bank中读取出来。

weixin_55035144的博客 2144

AutoMQ 云原生消息中间件

通过本文,我们深入探讨了 CloudCanal 与 AutoMQ 的整合能力,特别是其在 MySQL -> AutoMQ 数据链路中的表现。这一合作不仅为用户提供了更高效的数据同步解决方案,还通过云原生技术的应用,提升了系统的灵活性和成本效益。未来,随着技术的不断发展和完善,CloudCanal 与 AutoMQ 的合作必将为更多企业带来创新的动力和增长的机会。

数据同步 947

快速上手springboot+vue的前后端分离项目

使用webStorm新建项目后,把 .lock文件删除后项目运行才不报错,配置文件 vue.config.js 中加入 lintOnSave: false 关闭eslint语法检测。在多层嵌套的父子组件之间传递状态已经十分麻烦,而Vue更是没有为兄弟组件提供直接共享数据的办法。基于这个问题,许多框架提供了解决方案——使用全局的状态管理器,将所有分散的共享数据交由状态管理器保管,Vue也不例外。其中一种解决CORS 的方法, 在springboot项目中跨域的方法或类加上@CrossOrigin注解。

m0_61950264的博客 1906

Kafka Connect x AutoMQ: Zero Cross-AZ Data Pipeline

今天,我们正式宣布:AutoMQ BYOC(Bring Your Own Cloud)正式上线 Connector 托管能力。AutoMQ 作为基于 S3 构建的新一代 Diskless Kafka,已经在存储层实现了计算存储分离与 Zero Cross-AZ(零跨可用区)复制,大幅降低了云上 Kafka 的 TCO。

AutoMQ的博客 1014

智元机器人开源具身仿真框架 Genie Sim 入门教程

GenieSim是AgiBot推出的具身智能仿真框架,提供完整闭环开发管道,包括轨迹生成、模型训练和基准测试。框架支持Docker容器化部署,要求Ubuntu 22.04和NVIDIA硬件环境。主要功能涵盖: 支持12种基准测试任务 提供ADER评估框架 集成UniVLA/RDT等基线模型 支持PICO/键盘遥操作 具备轨迹记录回放功能 提供完整API控制接口 开发者可通过Hugging Face获取场景资产,使用标准化ROS主题与仿真环境交互。框架特别优化了碰撞检测和抓取物理模拟,适用于从简单抓取到复杂操

2506_90492529的博客 2542

42、多媒体与虚拟现实在艺术和影视领域的创新应用

本文探讨了多媒体与虚拟现实在艺术和影视领域的创新应用,涵盖三个典型案例:影视与人类学融合项目通过协作模式模糊作者与观众界限,推动文化文献的发展;交互式数字短片《分手》利用基于对象的广播技术探索个性化影视体验;威尼斯双年展瑞士馆4D项目则通过虚拟现实技术实现文化遗产的数字化展示。这些案例展示了技术在叙事、用户体验及文化保护中的深度应用,并展望了未来技术融合、个性化深化与文化遗产传承的发展趋势。

kappa的博客 115

AutoMQ x StarRocks: 英国美容健康领导者 Fresha 如何构建现代化实时分析数据栈

Fresha是全球领先的美容健康SaaS平台,服务数十万商家。随着业务增长,其原有数据架构面临瓶颈:消息层采用Amazon MSK托管Kafka,存算耦合导致高成本、弹性不足;分析层依赖PostgreSQL和Snowflake,实时性差且影响OLTP性能。经过评估,团队在一年内完成架构升级: 消息层:采用云原生Kafka方案AutoMQ,通过S3存储分离和WAL设计,存储成本降低17-20倍,实现秒级扩缩容,并兼容原有Kafka生态,一周内完成近1000个Topic的无缝迁移。 分析层:引入StarRock

StarRocks的博客 312

手把手教你学simulink(31.31)--双向DCDC电源场景示例:设计并实现一个基于变频控制的双向降压变换

设计并实现一个基于 Simulink 的双向降压变换器,能够在充电模式(从高压侧向低压侧传输能量)和放电模式(从低压侧向高压侧传输能量)之间切换,确保输出电压稳定,并根据负载变化自动调整工作模式。

MHD0815的博客 344

产品动态 | Kafka Linking 迁移工具上线、Table Topic发布、Azure开服

AutoMQ社区影响力持续攀升,GitHub Star突破7,000,其核心优势包括100% Kafka兼容、无状态架构和Kubernetes原生支持。最新发布Kafka零停机迁移工具、TableTopic数据湖集成功能,并新增Azure部署支持。即将上线托管Connector服务和安装体验优化,现提供14天免费试用。技术亮点涵盖弹性扩展、低成本运维和实时数据分析能力,助力企业实现云原生Kafka转型。

AutoMQ的博客 965

YOLO26改进 - SPPF模块 | 发论文神器!LSKA注意力改进SPPF,增强多尺度特征提取能力,高效涨点!!!

本文介绍了Large Separable Kernel Attention (LSKA)模块及其在YOLO26中的结合应用。LSKA旨在解决Visual Attention Networks (VAN)使用大内核卷积时的计算效率问题,通过将2D深度卷积层的卷积核分解为级联的水平和垂直1-D卷积核,降低了计算复杂度和内存占用,且使VAN更关注物体形状。我们将集成LSKA的SPPF_LSKA模块引入YOLO26,大量实验表明,改进后的模型在对象识别、检测、分割和稳健性测试上表现出色。

魔改工程师的博客 253

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

AutoMQ 携手阿里云共同发布新一代云原生 Kafka,帮助得物有效压缩 85% Kafka 云支出!

以成本换效率的上云方式需要高速发展的业务来支撑,在今天降本的大环境下,以云原生,甚至多云原生重新设计的云服务相较于「Cloud-Hosted」的云服务将在弹性、成本、容量、效率等各方面有数量级的优势,云托管(Cloud-Hosted)类型的云服务即将被淘汰。稳定性有其高大上的一面,也有需要埋头苦干的另一面,聪明人一起坚持做一件事情可能是得物稳定性的内涵,郝豪提到他在业务场景的治理上,告警规则的梳理上,持续做了 3 年,从 21 年到 23 年持续在投入,每一年都有不同的方向和目标。

AutoMQ的博客 2406

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

实时数据同步利器debezium教程

1 debezium概述 Debezium是一个开源项目,为捕获数据更改(change data capture,CDC)提供了一个低延迟的流式处理平台。你可以安装并且配置Debezium去监控你的数据库,然后你的应用就可以消费对数据库的每一个行级别(row-level)的更改。 只有已提交的更改才是可见的,所以你的应用不用担心事务(transaction)或者更改被回滚(roll back)。Debezium为所有的数据库更改事件提供了一个统一的模型,所以你的应用不用担心每一种数据库管理系统的错综复杂性。

数智技术 2万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

原理剖析:AutoMQ 如何实现分区持续重平衡

01 引言 在一个线上 Kafka 集群中,流量的波动、Topic 的创建和删除、Broker 的消亡和启动都随时可能发生,而这些变化可能导致流量在集群各个节点间分布不均,从而导致资源浪费、影响业务稳定。此时则需要主动将 Topic 的不同分区在各个节点间移动,以达到平衡流量和数据的目的。当前,Apache Kafka 仅提供了分区迁移工具,但具体的迁移计划则需要运维人员自行决定,而对于动...

gaoliang1719的专栏 268

AutoMQ 如何实现没有写性能劣化的极致冷读效率

Apache Kafka 一直以来都以极致的吞吐能力受到广大开发者和使用者的喜爱。AutoMQ[1] 在保证与 Apache Kafka 100% 兼容并且提供极致弹性和降本能力的基础上,不仅做到了相比Kafka更加极致的吞吐能力,同时还解决了Kafka冷读时,写吞吐性能劣化的问题。接下来,本文将从追赶读的实现来说明 AutoMQ 如何做到单机 1K 分区并发追尾读达到 1GB/s 的极致吞吐能力,并且在追赶读过程中避免发送流量的性能劣化。

AutoMQ的博客 1212

海外开发者为 AutoMQ 写的精品介绍,太干了!

在 KRaft 模式下的每个 broker 都保留了元数据的本地副本,而控制器群的领导者负责管理更新并将其复制到所有的 brokers,这大大降低了操作的复杂性和可能的故障点。AutoMQ 的工程师们开始思考:“是否存在一种方法,可以将所有的 Kafka 数据存储在对象存储中,同时还能保持像在本地硬盘上一样的高性能?传统的 Kafka 依赖于独立的 ZooKeeper 服务器来进行集群元数据的管理,但是 KRaft 模式消除了对 ZooKeeper 的依赖,简化了 Kafka 的运行并提升了其弹性。

AutoMQ的博客 1095

CDC工具之Debezium

Debezium是一组分布式服务,用于捕获数据库中的更改,以便您的应用程序可以看到这些更改并做出响应。

datacreating的博客 7746

原理剖析:AutoMQ 如何基于裸设备实现高性能的 WAL

Delta WAL 在 AutoMQ 中的主要职责是作为持久化写入缓冲区,配合 Log Cache 将写入的数据以 WAL 的形式在云盘上做高效的持久化。在云盘上持久化成功后才会返回客户端成功。而数据的读取则均会从内存中读取并返回客户端。AutoMQ S3Stream 设计了冷热隔离的缓存 Log Cache(缓存新写入数据)和 Block Cache(缓存从对象存储中拉取的数据)。Log Cache 中的数据在 WAL 的数据没有上传到对象存储之前在内存中不会失效。

AutoMQ的博客 1348

AutoMQ多协议支持:MQTT、AMQP协议适配器开发

随着物联网(IoT)和企业级消息通信需求的增长,单一消息协议已无法满足多样化场景。AutoMQ作为云原生消息队列,通过协议适配器架构支持多协议接入,本文将详细介绍MQTT(消息队列遥测传输)和AMQP(高级消息队列协议)适配器的开发实践,帮助开发者快速扩展AutoMQ的协议兼容性。 ## 协议适配器架构设计 AutoMQ的多协议支持基于Kafka Connect框架实现,通过源连接器(Sour...

gitblog_00758的博客 543

Debezium数据同步基础概论

在当今的分布式系统和现代企业架构中,数据的生成和存储已经变得高度分散。不同的系统、服务和应用程序可能都在各自的数据库中记录数据。这种环境下,保持数据的一致性和实时同步变得尤为复杂。特别是在需要对多个系统中的数据进行整合时,数据捕获和同步的挑战就更加突出。延迟:批量处理通常定时执行,导致无法提供实时数据更新。对于实时分析、事件驱动的应用,延迟会影响用户体验和业务决策的精准性。一致性:分布式系统中的数据可能存在并发修改的情况,导致数据一致性难以保证。传统的同步方式可能导致数据丢失、覆盖或者重复的问题。

hello.reader 5041

重磅!AutoMQ 品牌全新升级

2024 年伊始,AutoMQ 作为一家专业的消息队列和流存储软件服务供应商,正式发布全新的 logo 和官网与大家见面!一直以来,我们致力于引领消息和流存储走向云原生时代!希望通过这次品牌升级,不断创新,为大家提供更先进的产品和服务!新 logo 以"M"字母为核心设计元素,融合"A"字母,不仅象征着 AutoMQ 的名字,更代表了我们对核心业务和理念的坚持。

AutoMQ的博客 990

Debezium简介

参考:Debezium是一个开源项目,为捕获数据更改(change data capture,CDC)提供了一个低延迟的流式处理平台。你可以安装并且配置Debezium去监控你的数据库,然后你的应用就可以消费对数据库的每一个行级别(row-level)的更改。只有已提交的更改才是可见的,所以你的应用不用担心事务(transaction)或者更改被回滚(roll back)。Debezium为所有的数据库更改事件提供了一个统一的模型,所以你的应用不用担心每一种数据库管理系统的错综复杂性。

justlpf的专栏 3400
上一篇: AutoMQ 集成 Prometheus/VictoriaMetrics
下一篇: 通过 Airbyte 将数据从 AutoMQ 迁移同步到云数仓
AutoMQ
博客等级 码龄3年 1206粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值