Docker安装使用ES
安装
elasticsearch安装
在docker.elastic.co仓库查找springboot对应的es版本,,eg:
1
2
3
4# springboot 2.7.18
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.22
#如果上面的拉取太慢了,可以用下面的dockerhub的镜像
docker pull elastic/elasticsearch:7.17.22创建配置文件,执行
vim /workspace/elasticsearch.yml
写入如下内容1
2
3
4
5
6cluster.name: "docker-cluster"
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
xpack.security.enabled: false-
1
2
3
4
5
6
7mkdir /workspace/v_es_data/
chmod -R 777 /workspace/v_es_data/
# -m限制使用内存1g
docker run -d -m 1g -p 9200:9200 -e "discovery.type=single-node" --name es \
-v /workspace/v_es_data:/usr/share/elasticsearch/data \
-v /workspace/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
docker.elastic.co/elasticsearch/elasticsearch:7.17.22 测试,执行下面命令
1
2
3➜ ~ curl -X GET "127.0.0.1:9200/_cat/nodes?v=true&pretty"
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.18.0.2 35 84 5 0.06 0.09 0.13 cdfhilmrstw * eeeedfa1ed88
kibana安装(没采用)
可视化查看工具,类似dbeaver,非必需
执行下面命令进行安装
1
2
3docker run -d --name kibana -p 5601:5601 \
-e "ELASTICSEARCH_HOSTS=http://127.0.0.1:9200" \
docker.elastic.co/kibana/kibana:7.17.22访问
http://localhost:5601/
然后进行各种操作,比较复杂
本地采用es-client插件
数据同步方案
应用层同步
在应用层面进行数据同步,即在应用代码中同时写入 MySQL 和 Elasticsearch。
优点:依赖少,自定义同步逻辑。
缺点:数据一致性和可靠性方面存在一些挑战,特别是在高并发的场景下。
MySQL binlog(数据库日志)
借助于数据库日志(如 MySQL binlog)来捕获数据变化,并将其同步到 Elasticsearch。这种方法通常能够实时同步数据,并且不会对数据库性能造成太大影响。
优点:实时同步数据,不会对数据库性能造成太大影响。
缺点:性能开销,binlog 会占用额外的磁盘空间。
Debezium(重量级别)
优点:功能强大,支持复杂的配置和扩展,社区活跃。
缺点:需要 Kafka,配置相对复杂。
Maxwell(轻量级别)
Maxwell是一种开源的MySQL数据库同步工具,它可以将MySQL数据库的binlog转化为JSON格式,并将其发送到消息队列中。
需要mq和kafka等中间件
优点:轻量级,配置简单,适合快速实现。
缺点:功能相对简单,不支持复杂的场景
canal
Canal是阿里巴巴开发的一款数据库同步工具,它可以实现MySQL数据库的binlog解析和日志抓取。模拟mysql的从节点实现。
springboot接入ES
在pom.xml添加依赖
1
2
3
4<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
maxwell
1 | version: '3.8' |