**1. MongoDB Change Streams 활용하기**
MongoDB의 Change Streams는 데이터베이스, 컬렉션, 또는 클러스터 수준에서 발생하는 변경 사항을 실시간으로 스트리밍할 수 있는 기능입니다. 이를 활용하면 데이터베이스에서의 모든 변경 사항을 손쉽게 캡처할 수 있습니다.
```javascript
// MongoDB Change Stream 기본 예제
const MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://localhost:27017', (err, client) => {
if (err) throw err;
const db = client.db('testDB');
const collection = db.collection('testCollection');
const changeStream = collection.watch();
changeStream.on('change', (change) => {
console.log('Change detected:', change);
});
// 애플리케이션 종료 시 changeStream 닫기
process.on('SIGINT', () => {
changeStream.close(() => client.close());
});
});
```
**2. Apache Kafka에 데이터 전송하기**
MongoDB Change Streams로 캡처한 데이터는 Apache Kafka에 전송될 수 있습니다. Kafka는 대용량의 실시간 데이터 피드를 처리하는 데 유용한 분산 메시징 시스템입니다. Kafka에 데이터를 보내기 위해서는 `kafka-node`와 같은 Node.js Kafka 클라이언트를 사용할 수 있습니다.
```javascript
// Kafka와 연동하여 Change Stream 데이터 전송하기
const kafka = require('kafka-node');
const Producer = kafka.Producer;
const client = new kafka.KafkaClient({kafkaHost: 'localhost:9092'});
const producer = new Producer(client);
// Change Stream을 통해 발생한 변화를 Kafka로 전송
changeStream.on('change', (change) => {
const payloads = [{ topic: 'mongo_changes', messages: JSON.stringify(change) }];
producer.send(payloads, (err, data) => {
if (err) console.error('Kafka Error:', err);
else console.log('Data sent to Kafka:', data);
});
});
```
**3. 데이터 처리 및 소비하기**
Kafka에 전달된 CDC 데이터는 다양한 컨슈머 애플리케이션에서 소비할 수 있습니다. 예를 들어, 데이터 변환, 분석, 그리고 다른 데이터 저장소로의 전송 등이 가능합니다. `kafka-node`를 사용하여 Kafka 데이터를 소비할 수 있습니다.
```javascript
// Kafka로부터 데이터 소비하기
const Consumer = kafka.Consumer;
const consumer = new Consumer(
client,
[{ topic: 'mongo_changes', partition: 0 }],
{ autoCommit: true }
);
consumer.on('message', (message) => {
const change = JSON.parse(message.value);
console.log('Consumed change:', change);
// 데이터 처리 로직 추가 가능
});
```
이와 같이 MongoDB의 Change Streams와 Apache Kafka를 사용하여 MongoDB에서 발생하는 모든 변경 사항을 실시간으로 캡처하고 이를 다른 시스템으로 스트리밍할 수 있습니다. 이는 대규모 데이터 처리 및 실시간 분석 시스템에서 매우 유용한 방법 중 하나입니다.