前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Streaming Data Changes from MySQL to Elasticsearch

Streaming Data Changes from MySQL to Elasticsearch

作者头像
程序猿杜小头
发布于 2022-12-01 13:35:26
发布于 2022-12-01 13:35:26
1.5K00
代码可运行
举报
文章被收录于专栏:程序猿杜小头程序猿杜小头
运行总次数:0
代码可运行

Streaming Data Changes from MySQL to Elasticsearch

MySQL Binary Log包含了针对数据库执行DDL(Data Definition Language)和DML(Data Manipulation Language)操作的完整事件,其被广泛应用于数据复制和数据恢复场景。本文所分享的就是一种基于MySQL Binary Log特性实现增量数据近实时同步到Elasticsearch的一种技术。要想实现增量数据的同步,仅仅有binary log是不够的,我们还需要一款变更数据捕获(CDC,Change Data Capture)工具,可能大家很快就会想到阿里巴巴开源的Canal。没错,但本文今天给大家分享一款新的开源工具:Debezium。Debezium构建于Kafka之上,它为MySQLMongoDBPostgreSQLOrcaleCassandra等一众数据库量身打造了一套完全适配于Kafka Connectsource connector。首先,source connector会实时获取由INSERTUPDATEDELETE操作所触发的数据变更事件;然后,将其发送到Kafka topic中;最后,我们使用sink connector将topic中的数据变更事件同步到Elasticsearch中去,从而最终实现数据的近实时流转,如下图所示。

Debezium支持StandalonePrimary and replicaHigh available clustersMulti-primary等多种拓扑结构。

1 安装MySQL

1.1 解压与配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tar -xzvf mysql-8.0.21-el7-x86_64.tar.gz -C /root/debezium/

在mysql-8.0.21-el7-x86_64根目录下,新增my.cnf文本文件,然后将以下内容复制到my.cnf文件内。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[client]
port=3306
socket=/root/debezium/mysql-8.0.21-el7-x86_64/mysql.sock

[mysqld]
port=3306
socket=/root/debezium/mysql-8.0.21-el7-x86_64/mysql.sock
key_buffer_size=16M
max_allowed_packet=128M
basedir=/root/debezium/mysql-8.0.21-el7-x86_64
datadir=/root/debezium/mysql-8.0.21-el7-x86_64/data
server-id=101
log-bin=mysql-bin
binlog-format=ROW
binlog-row-image=FULL
binlog_expire_logs_seconds=86400

[mysqldump]
quick

1.2 初始化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./bin/mysqld --defaults-file=/root/debezium/mysql-8.0.21-el7-x86_64/my.cnf --initialize

执行上述初始化操作后,仔细观察控制台:你会发现root账号已经生成了一个临时密码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2020-12-28T02:55:20.774965Z6 [Note] [MY-010454] [Server] Atemporarypasswordisgeneratedforroot@localhost:&,Yot7iMeT_T

1.3 启动MySQL Server

初始化操作并没有启动MySQL Server,所以你还需要手动启动MySQL Server。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./bin/mysqld --defaults-file=/root/debezium/mysql-8.0.21-el7-x86_64/my.cnf --user=root

1.4 重置'root'账号密码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
USE mysql;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root账号新密码';
FLUSH PRIVILEGES;

1.5 更新远程访问权限

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
USE mysql;
UPDATE USER SET host = '%' WHERE user = 'root';
FLUSH PRIVILEGES;

2 安装Kafka

配置不多赘述,自行上网解决。目前Kafka依赖Zookeeper组件,故其内置了Zookeeper,我们可以直接使用,无需单独下载。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nohup ./bin/zookeeper-server-start.sh config/zookeeper.properties>/dev/null 2>&1 &
nohup ./bin/kafka-server-start.sh config/server.properties>/dev/null 2>&1 &

3 安装Debezium

3.1 解压source connector与sink connector

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tar -xzvf debezium-connector-mysql-1.4.2.Final-plugin.tar.gz -C /root/debezium/connector-plugins
unzip confluentinc-kafka-connect-elasticsearch-11.0.3 -d /root/debezium/connector-plugins

3.2 Kafka Connect

为了更方便、更规范地整合Kafka与其他数据系统,Kafka提供了Kafka Connect,Kafka Connect定义了source connectorsink connector接口规范。如果想从其他数据系统传输数据到Kafka,那么就需要实现source connector接口规范;如果想从Kafka传输数据到其他数据系统,那么就需要实现sink connector接口规范。此外,Kafka Connect还暴露了一套REST API,可以更方便地对connector进行管理。

3.2.1 配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#################### connect-distributed.properties ###################
bootstrap.servers=localhost:9092

group.id=connect-cluster

key.converter=org.apache.kafka.connect.json.JsonConverter
value.converter=org.apache.kafka.connect.json.JsonConverter
key.converter.schemas.enable=true
value.converter.schemas.enable=true

# Topic to use for storing offsets.
# This topic should have many partitions and be replicated and compacted.
offset.storage.topic=connect-offsets
offset.storage.replication.factor=1

# Topic to use for storing connector and task configurations.
# This topic should be a single partition, highly replicated.
config.storage.topic=connect-configs
config.storage.replication.factor=1

# Topic to use for storing statuses. 
# This topic can have multiple partitions and should be replicated and compacted.
status.storage.topic=connect-status
status.storage.replication.factor=1
 
# Hostname & Port for the REST API to listen on. 
rest.host.name=localhost
rest.port=8083

# Set to a list of filesystem paths separated by commas (,) to enable class loading isolation for plugins
# The list should consist of top level directories. 
# source connector和sink connector的依赖路径
plugin.path=/root/debezium/connector-plugins/
3.2.2 创建topic
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic connect-offsets --partitions 3 --replication-factor 1 --config cleanup.policy=compact
./bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic connect-configs --partitions 1 --replication-factor 1 --config cleanup.policy=compact
./bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic connect-status --partitions 3 --replication-factor 1 --config cleanup.policy=compact
3.2.3 启动
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nohup ./bin/connect-distributed.sh config/connect-distributed.properties>/dev/null 2>&1 &

3.3 注册debezium source connector

参数

描述

默认值

include.schema.changes

若值为true,那么source connector会将schema变更事件发布到kakfa中;topic的命名和database.server.name一致

true

tombstones.on.delete

若值为true,那么source connector针对delete操作会额外生成一个墓碑事件

true

database.server.id

和mysql中server_id值一致

database.include.list

指定数据库名称,多个数据库以逗号分割

database.history.kafka.topic

指定保存mysql schema history的topic名称,该topic仅能由debezium自己消费

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "name": "debezium-mysql-source-connector",
    "config": {
        "connector.class": "io.debezium.connector.mysql.MySqlConnector",
        "tasks.max": "1",
        "include.schema.changes": true,
        "tombstones.on.delete": true,
        "database.hostname": "10.254.9.82",
        "database.port": "3306",
        "database.user": "root",
        "database.password": "Nz_3@sMw7P",
        "database.server.id": "101",
        "database.server.name": "master",
        "database.include.list": "inventory",
        "database.history.kafka.bootstrap.servers": "localhost:9092",
        "database.history.kafka.topic": "master.schema.history"
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -X POST -H 'Content-Type: application/json' -d '@/root/debezium/connector-configs/debezium-mysql-source-connector.json' http://localhost:8083/connectors

当source connector注册成功后,再次检查topic,你会发现两个全新的topic,它们分别是:master和master.schema.history,二者差异如下表所示。

topic名称

保存内容

topic消费方

master

schema变更事件,但仅仅涉及database.include.list所指定的数据库

第三方消费者

master.schema.history

schema变更事件,涉及所有数据库

debezium

3.4 注册confluent sink connector

参数

描述

默认值

key.ignore

若值为false,那么Elasticsearch文档ID将和MySQL保持一致

false

schema.ignore

若值为false,那么Elasticsearch将禁用动态映射特性,转而根据schema来定义文档中字段的数据类型

false

write.method

若值为UPSERT,那么Elasticsearch会根据文档是否存在来进行INSERT亦或UPDATE操作

INSERT

behavior.on.null.values

若值为DELETE,那么sink connector将会根据文档ID删除该文档

FAIL

transforms.unwrap.type

ElasticsearchSinkConnector主要用于数据扁平化处理,因为Debezium所生成的数据变更事件是一种多层级的数据结构,这不利于在Elasticsearch中保存,所以需要对这种结构进行扁平化处理

transforms.unwrap.drop.tombstone

若值为false,墓碑事件不会被丢弃

true

transforms.unwrap.delete.handling.mode

Debezium会为每个DELETE操作生成删除事件和墓碑事件;若值为none,那么墓碑事件将会保留

drop

transforms.key.type

ExtractField$Key可以从Debezium数据变更事件的Key中抽取特定字段值

transforms.key.field

指定抽取字段

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "name": "confluent-elasticsearch-sink-connector",
    "config": {
        "connector.class": "io.confluent.connect.elasticsearch.ElasticsearchSinkConnector",
        "tasks.max": "1",
        "topics": "master.inventory.customers",
        "batch.size": "500",
        "key.ignore": false,
        "schema.ignore": false,
        "write.method": "UPSERT",
        "connection.url": "http://10.254.8.14:9200",
        "connection.username": "elastic",
        "connection.password": "Qwe123!@cmss",
        "connection.timeout.ms": "3000",
        "read.timeout.ms": "5000",
        "behavior.on.null.values": "DELETE",
        "transforms": "unwrap, key",
        "transforms.unwrap.type": "io.debezium.transforms.ExtractNewRecordState",
        "transforms.unwrap.drop.tombstones": false,
        "transforms.unwrap.delete.handling.mode": "none",
        "transforms.key.type": "org.apache.kafka.connect.transforms.ExtractField$Key",
        "transforms.key.field": "id"
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -X POST -H 'Content-Type: application/json' -d '@/root/debezium/connector-configs/confluent-elasticsearch-sink-connector.json' http://localhost:8083/connectors

当你完成source connector和sink connector的注册后,你可以通过通过Kafka Connect提供的REST API来查看当前已注册的连接器,具体如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl --location --request GET 'http://10.254.8.14:8083/connectors'
-----------------------------------
[
    "confluent-elasticsearch-sink-connector",
    "debezium-mysql-source-connector"
]

kafka transformation

  • Source connectors pass records through the transformation before writing to the Kafka topic.
  • Sink connectors pass records through the transformation before writing to the sink.

3.5 验证

3.5.1 插入数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
INSERT INTO `inventory`.`customers`
            (`id`,
             `first_name`,
             `last_name`,
             `email`,
             `create_time`,
             `update_time`)
VALUES      ( 1001,
              'optimus',
              'prime',
              'optimus@prime.com',
              '2021-03-03 13:55:07.000000',
              '2021-03-21 13:55:11.000000' ); 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /master.inventory.customers/_search
{
    "query": {
        "match_all": {}
    }
}
-----------------------------------
{
    "took": 750,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 1,
            "relation": "eq"
        },
        "max_score": 1.0,
        "hits": [
            {
                "_index": "master.inventory.customers",
                "_type": "_doc",
                "_id": "1001",
                "_score": 1.0,
                "_source": {
                    "id": 1001,
                    "first_name": "optimus",
                    "last_name": "prime",
                    "email": "optimus@prime.com",
                    "create_time": 1614779707000000,
                    "update_time": 1616334911000000
                }
            }
        ]
    }
}
-----------------------------------
3.5.2 删除数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DELETE FROM `inventory`.`customers` WHERE  `id` = 1002 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /master.inventory.customers/_search
{
    "query": {
        "match_all": {}
    }
}
-----------------------------------
{
    "took": 435,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 0,
            "relation": "eq"
        },
        "max_score": null,
        "hits": []
    }
}
-----------------------------------
3.5.3 更新数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UPDATE `inventory`.`customers`
SET    `email` = 'optimus_prime@transformers.com'
WHERE  `id` = 1001 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /master.inventory.customers/_search
{
    "query": {
        "match_all": {}
    }
}
-----------------------------------
{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 1,
            "relation": "eq"
        },
        "max_score": 1.0,
        "hits": [
            {
                "_index": "master.inventory.customers",
                "_type": "_doc",
                "_id": "1001",
                "_score": 1.0,
                "_source": {
                    "id": 1001,
                    "first_name": "optimus",
                    "last_name": "prime",
                    "email": "optimus_prime@transformers.com",
                    "create_time": 1614779707000000,
                    "update_time": 1616334911000000
                }
            }
        ]
    }
}
-----------------------------------
3.5.4 更新主键
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UPDATE `inventory`.`customers`
SET    `id` = 1002
WHERE  `id` = 1001 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /master.inventory.customers/_search
{
    "query": {
        "match_all": {}
    }
}
-----------------------------------
{
    "took": 2,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 1,
            "relation": "eq"
        },
        "max_score": 1.0,
        "hits": [
            {
                "_index": "master.inventory.customers",
                "_type": "_doc",
                "_id": "1002",
                "_score": 1.0,
                "_source": {
                    "id": 1002,
                    "first_name": "optimus",
                    "last_name": "prime",
                    "email": "optimus_prime@transformers.com",
                    "create_time": 1614779707000000,
                    "update_time": 1616334911000000
                }
            }
        ]
    }
}
-----------------------------------
3.5.5 新增字段
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ALTER TABLE `inventory`.`customers` ADD COLUMN `address` VARCHAR ( 255 ) NULL;

INSERT INTO `inventory`.`customers`
            (`id`,
             `first_name`,
             `last_name`,
             `email`,
             `create_time`,
             `update_time`,
             `address`
             )
VALUES      ( 1001,
              'optimus',
              'prime',
              'optimus@prime.com',
              '2021-03-03 13:55:07.000000',
              '2021-03-21 13:55:11.000000',
              '77 Massachusetts Avenue'); 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET /master.inventory.customers/_search
{
    "query": {
        "match_all": {}
    }
}
-----------------------------------
{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 1,
            "relation": "eq"
        },
        "max_score": 1.0,
        "hits": [
            {
                "_index": "master.inventory.customers",
                "_type": "_doc",
                "_id": "1001",
                "_score": 1.0,
                "_source": {
                    "id": 1001,
                    "first_name": "optimus",
                    "last_name": "prime",
                    "email": "optimus@prime.com",
                    "create_time": 1614779707000000,
                    "update_time": 1616334911000000,
                    "address": "77 Massachusetts Avenue"
                }
            }
        ]
    }
}
-----------------------------------

4 总结

本文为大家分享了一种基于Debezium实现增量数据实时流转的方案。当你通过INSERT指令向MySQL新增一行记录时,那么Elasticsearch中也会实时新增一行记录;当你通过UPDATE指令向MySQL更新一行记录时,那么Elasticsearch中也会实时对该行记录进行更新;当你通过DELETE指令向MySQL删除一条记录时,那么Elasticsearch中也会实时删除该行记录。同时,Debezium在应对主键更新亦或字段新增两种场景时,依然有较好的表现。当然,如果你想将存量数据复制到Elasticsearch中,那么建议采用Logstash配合Kafka来实现。

5 参考文档

  1. https://debezium.io/
  2. https://docs.confluent.io/kafka-connect-elasticsearch/current/index.html
  3. https://downloads.apache.org/kafka/2.7.0/kafka_2.13-2.7.0.tgz
  4. https://repo1.maven.org/maven2/io/debezium/debezium-connector-mysql/1.4.2.Final/debezium-connector-mysql-1.4.2.Final-plugin.tar.gz
  5. https://d1i4a15mxbxib1.cloudfront.net/api/plugins/confluentinc/kafka-connect-elasticsearch/versions/11.0.3/confluentinc-kafka-connect-elasticsearch-11.0.3.zip
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序猿杜小头 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
AI阅读助手ChatDOC:基于 AI 与文档对话、重新定义阅读方式的AI文献阅读和文档处理工具
在过去的 2 个多月里,以 ChatGPT 为代表的 AI 风靡全球。随着 GPT 模型的不断优化,ChatGPT 在多个领域表现出了堪比专家的水平。目前,已有不少专家将 ChatGPT 为代表 AI 浪潮,视为新一次工业革命的开始。面对 ChatGPT, 有人欣喜若狂,有人焦虑难安。无论我们抱有何种态度,AI 时代已经降临。 AI 是否可替代人类,或许过于遥远。善用 AI 工具的人,效率将提升十倍百倍,替代不使用或者不擅长 AI 工具的人。
数字花园
2023/07/11
1.4K0
AI阅读助手ChatDOC:基于 AI 与文档对话、重新定义阅读方式的AI文献阅读和文档处理工具
AI 时代的学习方式: 和文档对话
随着 ChatGPT 的出现,基于 GPT 的各种工具以及相似的大模型工具如雨后春笋一样不断涌现。 可以说,我们正处在人工智能爆发期,人工智能的应用正在对人们的生活、工作方方面面都在产生重大影响。 有些人面对这种场景非常焦虑,担心自己会被取代而失业,其实“不是人工智能淘汰人,而是会使用人工智能的人淘汰了不会使用的人”,现在如果还对人工智能排斥或者还不积极学习的人很容易被淘汰。
明明如月学长
2023/04/06
1.9K0
AI 时代的学习方式: 和文档对话
「AIGC」- ChatGPT可以怎么玩?
chatGPT这么火,这几天一番体验之后,除了惊叹,同时也引发了作为程序员的担忧:我的工作是否会被AI取代?
百川AI
2023/04/02
2.8K0
「AIGC」- ChatGPT可以怎么玩?
进击的AI工具:全能AI阅读软件Walles AI
好消息是,我们已经进入了 AIGC时代,随着AI大模型的爆发,AI工具,尤其是AI阅读工具为我们提供了全新的高效解决方案。
数字花园
2023/11/09
4870
进击的AI工具:全能AI阅读软件Walles AI
Prompt learning 教学技巧篇:通过增加示例、引导词、特殊符号指令等方式让chatgpt输出更好的答案
在问答场景里,为了让 AI 回答更加准确,一般会在问题里加条件。比如让 AI 推荐一部电影给你 Recommend a movie to me 。但这个 prompt 太空泛了,AI 无法直接回答,接着它会问你想要什么类型的电影,但这样你就需要跟 AI 聊很多轮,效率比较低。
汀丶人工智能
2023/05/13
2K0
Prompt learning 教学技巧篇:通过增加示例、引导词、特殊符号指令等方式让chatgpt输出更好的答案
新玩法:用ChatGPT做内容
导语|ChatGPT无疑是当前最热门的人工智能,每次迭代都让人惊叹。我们团队也在“增效”的路上积极探索。文章包含了内容运营工作中 ChatGPT 的具体应用场景及一些关于AIGC的个人想法,希望能为各位与内容运营打交道的同学的工作提效。 提示:使用ChatGPT过程中请注意信息安全,避免敏感数据泄露。 本文作者:huiyuuchen,腾讯CDC产品运营 01 AIGC与内容运营 我们正在经历着 AIGC 互联网时代。内容生产方式经历了由 PGC—>UGC—>AIGC 的过程。现在,我们可以利用人工智能自动
腾讯大讲堂
2023/04/28
1.3K0
新玩法:用ChatGPT做内容
ChatGPT专属SOP,70+提问模板解决实际工作场景困惑
品牌案例、竞品、信息来源、项目分析、官方渠道、品类、品牌、节日节庆、明星、国家、奖项、代理商、项目名称、项目描述、品牌介绍、竞争情况、运营数据、财务信息、交易信息、法律问题、网络平台、行业人士、品牌拥有者、报纸杂志、研究报告
用户10399177
2023/05/15
1K1
我用低代码结合ChatGPT开发,每天多出1小时摸鱼
GPT 出现之后,很多人推测大量的软件都会因为其出现而重写。本文主要是低代码平台与 ChatGPT 结合的一些思考以及实践。期望与各位读者一起搭上 AI 这列快车,为开发提提速~
腾讯云开发者
2023/06/05
2.5K0
我用低代码结合ChatGPT开发,每天多出1小时摸鱼
使用 GPT4 和 ChatGPT 开发应用:前言到第三章
在发布仅仅五天后,ChatGPT 就吸引了惊人的一百万用户,这在科技行业及其他领域引起了轰动。作为一个副作用,OpenAI API 用于人工智能文本生成的接口突然曝光,尽管它已经可用了三年。ChatGPT 界面展示了这种语言模型的潜力,突然之间,开发人员和发明家开始意识到他们手边可利用的令人难以置信的可能性。
ApacheCN_飞龙
2024/01/18
8620
使用 GPT4 和 ChatGPT 开发应用:前言到第三章
站在大时代的边上:ChatGPT使用姿势大全
2015年看过的这篇知乎长文:https://zhuanlan.zhihu.com/p/19950456 ,8年后仍然记忆犹新,文章提出人工智能到达1个点(奇点)后,会加速发展,直到人类不能理解。
成江东
2023/04/20
7560
站在大时代的边上:ChatGPT使用姿势大全
站在大时代的边上:ChatGPT使用姿势大全
2015年看过的这篇知乎长文:https://zhuanlan.zhihu.com/p/19950456 ,8年后仍然记忆犹新,文章提出人工智能到达1个点(奇点)后,会加速发展,直到人类不能理解。
成江东
2023/04/20
5.4K5
站在大时代的边上:ChatGPT使用姿势大全
在日常生活、工作中deepseek能帮我们解决哪些问题
DeepSeek极大降低了普通人使用AI的门槛,让AI快速渗透到人们的工作和生活中,无论是专业场景提效、教育学术赋能、商业创新甚至日常生活,都变得更加轻松。
星哥玩云
2025/03/04
3430
在日常生活、工作中deepseek能帮我们解决哪些问题
ChatGPT的前世今生:OpenAI的技术「执拗」与「豪赌」
机器之心专栏 作者:追一科技 本文全方位地介绍了 ChatGPT 的能力特征、发展历程以及 OpenAI 一路走来所坚守的技术路线,并对 ChatGPT 出现之后 NLP 领域的范式转换进行了展望,即 ChatGPT 开启「文本生成 + 指令」的范式。 1、ChatGPT,不再「愚蠢」的人工智能 ChatGPT 的相关话题应该算是继 AlphaGo 以来,最出圈的人工智能热点了。简单来说,它是一个可以用自然语言对话的机器人,你可以问它任何问题(当然它有可能会答错,但你可以引导并纠正它),它都会以非常流畅、
机器之心
2023/02/27
6460
ChatGPT的前世今生:OpenAI的技术「执拗」与「豪赌」
复旦发布中国版ChatGPT:MOSS开启测试冲上热搜,服务器挤爆
机器之心报道 编辑:泽南、蛋酱 不知道这个人工智能,有没有获得完整的一生。 ChatGPT 是最先进的 AI,也是最热门的应用 —— 自去年 11 月底发布以来,它的月活跃用户两个月超过一亿,轻松拿到了全球互联网史上用户增长速度的第一。 它也是一种门槛很高的技术。由于 ChatGPT 的训练过程所需算力资源大、标注成本高,目前国内暂未出现对大众开放的同类产品。百度、阿里、京东等互联网大厂都放出消息,表示正在打造「国产 ChatGPT」,并将在近期发布。 在各大厂产品到位之前,学界先有了消息。2 月 20 日
机器之心
2023/02/23
6180
复旦发布中国版ChatGPT:MOSS开启测试冲上热搜,服务器挤爆
Prompt learning 教学基础篇:prompt基本原则以及使用场景技巧助力你更好使用chatgpt,得到你想要的答案
Dyno Prompt Engineering IDE是一款基于人工智能技术的集成开发环境(IDE),它可以帮助开发者更快速、更高效地进行软件开发。Dyno Prompt Engineering IDE的主要特点包括以下几个方面:
汀丶人工智能
2023/05/11
6560
AI新晋王者Claude3完胜ChatGPT4?
3月4日,OpenAI 的主要竞争对手之一Anthropic发布了最新的Claude 3系列模型,并宣称claude3系列在推理、数学、编程、多语言理解和视觉方面都树立了新的行业基准。Claude家族包括了Claude 3 Haiku, Claude 3 Sonnet,Claude 3 Opus三名成员(图1),每个模型都有着惊人的进步,Claude 3系列模型为企业用例提供了速度和性能的最佳组合,并且在成本上低于市场上的其他模型,允许使用者能够选择在智力、速度和费用上选择最合适的模型。所有的Claude3模型都显示出其在分析和预测、细致的内容创建、代码生成和对话非英语语言(比如西班牙语、日语和法语)等方面的超越性能力。目前,Opus和Sonnet已经可以在Claude API上使用,而Haiku模型也即将推出。
存内计算开发者
2024/05/17
1820
如何用 GPT-4 全模式(All Tools)帮你高效学习和工作?
之前,作为 ChatGPT Plus 用户,如果你集齐下面这五个模式,就会成为别人羡慕的对象。
王树义
2023/11/06
6770
如何用 GPT-4 全模式(All Tools)帮你高效学习和工作?
ChatGPT与DeepSeek:AI语言模型的巅峰对决
在当今人工智能飞速发展的时代,ChatGPT 和 DeepSeek 作为两款备受瞩目的 AI 语言模型,各自展现出了独特的魅力与实力。ChatGPT 凭借 OpenAI 的强大技术支撑和广泛的应用场景,自问世以来便成为了 AI 领域的焦点,引领着语言模型发展的潮流。而 DeepSeek 作为新兴的国产 AI 语言模型,以其创新的技术路线和对本土市场的深刻理解,迅速在全球范围内崭露头角,吸引了大量用户和开发者的关注。
用户11396661
2025/03/02
4910
成本2元开发游戏,最快3分钟完成!全程都是AI智能体“打工”,大模型加持的那种
家人们,OpenAI前脚刚发布自定义GPT,让人人都能搞开发;后脚国内一家大模型初创公司也搞了个产品,堪称重新定义开发——让AI智能体们协作起来!
量子位
2023/11/16
3780
成本2元开发游戏,最快3分钟完成!全程都是AI智能体“打工”,大模型加持的那种
技术阅读周刊第第四期
URL: https://www.reddit.com/r/java/comments/17ixfzf/technology_trends_for_spring_projects/ 这是一个 Reddit 帖子,讨论了 Spring 项目的技术趋势,以下是一些点赞较高的回复:在招聘的时候还会 Spring 考虑周边的技术栈:比如 Linux、Docker、kubernetes、Git 等,但如果你具备 Spring Security 和 OpenSSL 的话会更受欢迎。
crossoverJie
2023/11/06
1520
技术阅读周刊第第四期
推荐阅读
相关推荐
AI阅读助手ChatDOC:基于 AI 与文档对话、重新定义阅读方式的AI文献阅读和文档处理工具
更多 >
LV.6
阿里算法工程师
目录
  • Streaming Data Changes from MySQL to Elasticsearch
    • 1 安装MySQL
      • 1.1 解压与配置
      • 1.2 初始化
      • 1.3 启动MySQL Server
      • 1.4 重置'root'账号密码
      • 1.5 更新远程访问权限
    • 2 安装Kafka
    • 3 安装Debezium
      • 3.1 解压source connector与sink connector
      • 3.2 Kafka Connect
      • 3.3 注册debezium source connector
      • 3.4 注册confluent sink connector
      • 3.5 验证
    • 4 总结
    • 5 参考文档
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档