Đồng bộ dữ liệu giữa MongoDB với Elasticsearch bằng Transporter

Đồng bộ dữ liệu giữa MongoDB với Elasticsearch bằng Transporter

Trong bài này mình sẽ làm ví dụ chuyển data từ MongoDB sang Elasticsearch bằng Transport.

1. Transporter là gì? Cài đặt transporter trên ubuntu.

Transporter là một phần mềm mã nguồn mở để di chuyển / đồng bộ dữ liệu dữ liệu trên các kho dữ liệu khác nhau.

Các kho dữ liệu được đồng bộ ở đây có thể là database, files…

Dữ liệu được đọc từ kho dữ liệu nguồn (source) sau đó được chỉnh sửa, tách lọc… (transformer) rồi chuyển tới kho dữ liệu đích (sink) thông qua pipeline do bạn định nghĩa.

Cài đặt transport trên ubuntu

Download transporter:

wget https://github.com/compose/transporter/releases/download/v0.5.2/transporter-0.5.2-linux-amd64

(Download các phiên bản khác tại đây)

Chuyển các file vừa tải về vào folder /usr/local/bin/transporter hoặc folder nào đó bạn thích.

sudo mv transporter-*-linux-amd64 /usr/local/bin/transporter

Run transporter

chmod +x /usr/local/bin/transporter

Kiểm tra transport sau khi cài đặt bằng lệnh transporter

Đồng bộ dữ liệu giữa MongoDB với Elasticsearch bằng Transporter

2. Chuyển dữ liệu từ MongoDB sang Elasticsearch

(Xem lại: Hướng dẫn cài đặt MongoDB)

(Xem lại: Hướng dẫn cài đặt Elasticsearch)

Trong ví dụ này mình sẽ chuyển dữ liệu trong database demo sang elasticsearch.

B1: Tạo dữ liệu cho database demo:

db.player.insert({'name':'ronaldo','position':'striker'})
db.player.insert({'name':'buffon','position':'goalkeeper'})

tạo dữ liệu trên database mongo

B2: Tạo pipeline để chuyển dữ liệu từ MongoDB sang Elasticsearch bằng lệnh:

transporter init mongodb elasticsearch

Tạo pipeline để chuyển dữ liệu từ MongoDB sang Elasticsearch

Kết quả là file pipeline.js được tạo ra, file này sẽ chứa các thông tin nguồn, đích của dữ liệu:

var source = mongodb({
  "uri": "${MONGODB_URI}"
  // "timeout": "30s",
  // "tail": false,
  // "ssl": false,
  // "cacerts": ["/path/to/cert.pem"],
  // "wc": 1,
  // "fsync": false,
  // "bulk": false,
  // "collection_filters": "{}",
  // "read_preference": "Primary"
})

var sink = elasticsearch({
  "uri": "${ELASTICSEARCH_URI}"
  // "timeout": "10s", // defaults to 30s
  // "aws_access_key": "ABCDEF", // used for signing requests to AWS Elasticsearch service
  // "aws_access_secret": "ABCDEF" // used for signing requests to AWS Elasticsearch service
  // "parent_id": "elastic_parent" // defaults to "elastic_parent" parent identifier for Elasticsearch
})

t.Source("source", source, "/.*/").Save("sink", sink, "/.*/")

Các bạn có thể tạo biến môi trường MONGODB_URIELASTICSEARCH_URI tương ứng hoặc có thể sửa trực tiếp vào file pipeline.js.

Ở đây mình tạo biến môi trường:

MONGODB_URI sẽ là uri tới database demo trên mongodb

export MONGODB_URI='mongodb://localhost/demo'

ELASTICSEARCH_URI sẽ là uri đích để chứa dữ liệu trên elasticsearch:

export ELASTICSEARCH_URI='http://localhost:9200/demo'

B3: chạy file pipeline.js để chuyển dữ liệu từ mongodb sang elasticsearch

transporter run pipeline.js

Kết quả:

chạy file pipeline.js để chuyển dữ liệu từ mongodb sang elasticsearch

Kiểm tra lại dữ liệu trên elasticsearch bằng lệnh:

curl $ELASTICSEARCH_URI/_search?pretty=true

Kiểm tra lại dữ liệu trên elasticsearch bằng lệnh:

Đó, tất cả dữ liệu trên database demo đã được chuyển sang elasticsearch.

 

Okay, Done!

References:

https://github.com/compose/transporter

https://www.digitalocean.com/…transporter-on-ubuntu-16-04

stackjava.com