Apache Camel을 통해 Elasticsearch로 데이터를 수집하는 방법

실제 예제를 통해 Apache Camel을 통해 Elasticsearch로 데이터를 수집하는 방법을 알아보세요.

Elasticsearch를 사용하면 데이터를 빠르고 유연하게 색인화할 수 있습니다. 클라우드에서 무료로 사용해 보거나 로컬에서 실행하여 색인 작업이 얼마나 쉬운지 확인해 보세요.

Apache Camel을 사용해 Elasticsearch로 데이터를 수집하는 것은 검색 엔진의 견고함과 통합 프레임워크의 유연성을 결합하는 프로세스입니다. 이 글에서는 Apache Camel이 어떻게 데이터 수집을 간소화하고 Elasticsearch로 최적화할 수 있는지 살펴보겠습니다. 이 기능을 설명하기 위해, Apache Camel을 구성하고 사용하여 Elasticsearch로 데이터를 전송하는 방법을 단계별로 보여주는 입문용 애플리케이션을 구현해 보겠습니다.

아파치 카멜이란 무엇인가요?

Apache Camel은 다양한 시스템 연결을 간소화하는 오픈소스 통합 프레임워크로, 개발자는 시스템 통신의 복잡성에 대한 걱정 없이 비즈니스 로직에 집중할 수 있습니다. Camel의 중심 개념은 "경로(" )로, 메시지가 출발지에서 목적지까지 이동하는 경로를 정의하며 변환, 유효성 검사, 필터링 등의 중간 단계가 포함될 수 있습니다.

아파치 카멜 아키텍처

Camel은 "구성 요소" 를 사용하여 데이터베이스 및 메시징 서비스와 같은 다양한 시스템 및 프로토콜에 연결하고 "엔드포인트" 를 사용하여 메시지의 시작 및 종료 지점을 나타냅니다. 이러한 개념은 모듈식의 유연한 설계를 제공하므로 복잡한 통합을 효율적이고 확장 가능하게 구성하고 관리하기가 더 쉬워집니다.

Elasticsearch와 Apache Camel 사용

Apache Camel을 사용해 데이터를 Elasticsearch 클러스터로 수집하는 간단한 Java 애플리케이션을 구성하는 방법을 보여드리겠습니다. Apache Camel에 정의된 경로를 사용하여 Elasticsearch에서 데이터를 생성, 업데이트 및 삭제하는 프로세스도 다룹니다.

1. 종속성 추가하기

이 통합을 구성하는 첫 번째 단계는 프로젝트의 pom.xml 파일에 필요한 종속성을 추가하는 것입니다. 여기에는 Apache Camel 및 Elasticsearch 라이브러리가 포함됩니다. 새로운 Java API 클라이언트 라이브러리를 사용할 것이므로 camel-elasticsearch 컴포넌트를 가져와야 하며 버전은 camel-core 라이브러리와 동일해야 합니다.

Java 로우레벨 Rest 클라이언트를 사용하려면 Elasticsearch 로우레벨 Rest 클라이언트 구성 요소를 사용해야 합니다.

2. Camel 컨텍스트 구성 및 실행

구성은 경로를 정의하고 실행하는 기반이 되는 DefaultCamelContext 클래스를 사용하여 새 Camel 컨텍스트를 만드는 것으로 시작됩니다. 다음으로, Apache Camel이 Elasticsearch 클러스터와 상호 작용할 수 있도록 Elasticsearch 구성 요소를 구성합니다. ESlasticsearchComponent 인스턴스는 로컬 Elasticsearch 클러스터의 기본 주소인 localhost:9200 주소에 연결하도록 구성됩니다. 인증이 필요한 환경 설정의 경우 구성 요소를 구성하고 기본 인증을 활성화하는 방법에 대한 설명서( "구성 요소 구성 및 기본 인증 활성화" 참조)를 읽어보셔야 합니다.

그런 다음 이 구성 요소를 Camel 컨텍스트에 추가하여 정의된 경로가 이 구성 요소를 사용하여 Elasticsearch에서 작업을 수행할 수 있도록 합니다.

그 후 경로가 컨텍스트에 추가됩니다. 문서 일괄 색인, 업데이트, 삭제를 위한 경로를 생성합니다.

3. Camel 경로 구성

데이터 인덱싱

첫 번째로 구성할 경로는 데이터 인덱싱을 위한 것입니다. 영화 카탈로그가 포함된 JSON 파일을 사용하겠습니다. 경로는 src/main/resources/movies.json 에 있는 파일을 읽고, JSON 콘텐츠를 Java 객체로 역직렬화한 다음, 여러 메시지를 하나로 결합하는 집계 전략을 적용하여 Elasticsearch에서 일괄 작업을 수행할 수 있도록 구성됩니다. 메시지당 500개 항목의 크기가 구성되었으므로 대량으로 한 번에 500개의 필름을 색인합니다.

Elasticsearch 작업 일괄 라우팅

문서 배치가 Elasticsearch의 대량 작업 엔드포인트로 전송됩니다. 이 접근 방식은 대량의 데이터를 처리할 때 효율성과 속도를 보장합니다.

데이터 업데이트

다음 경로는 문서를 업데이트하는 것입니다. 이전 단계에서 일부 영화를 색인화했으며 이제 참조 코드로 문서를 검색하는 새 경로를 만든 다음 등급 필드를 업데이트합니다.

Elasticsearch 구성 요소가 등록되고 사용자 정의 경로 IngestionRoute가 추가되는 Camel 컨텍스트 (DefaultCamelContext) 를 설정합니다. 작업은 직접:업데이트-인제스트먼트 엔드포인트에서 경로를 시작하는 ProducerTemplate을 통해 문서 코드를 전송하는 것으로 시작됩니다.

다음으로, 이 흐름의 입력 엔드포인트인 IngestionRoute가 있습니다. 이 경로는 여러 파이프라인 연산을 수행합니다. 먼저, 코드별로 문서를 찾기 위해 Elasticsearch에서 검색을 수행합니다 (direct:search-by-id), 여기서 SearchByCodeProcessor는 코드를 기반으로 쿼리를 조합합니다. 그런 다음, 검색된 문서가 UpdateRatingProcessor에 의해 처리되고, 그 결과를 Movie 개체로 변환하고, 영화 등급을 특정 값으로 업데이트하고, 업데이트를 위해 업데이트된 문서를 다시 Elasticsearch로 전송할 수 있도록 준비합니다.

SearchByCodeProcessor 프로세서는 검색 쿼리를 실행하도록만 구성되었습니다:

UpdateRatingProcessor 프로세서는 등급 필드를 업데이트할 책임이 있습니다.

데이터 삭제

마지막으로 문서 삭제 경로가 구성됩니다. 여기서는 해당 ID를 사용하여 문서를 삭제합니다. Elasticsearch에서 문서를 삭제하려면 문서 식별자, 즉 문서가 저장되어 있는 인덱스를 알고 삭제 요청을 실행해야 합니다. Apache Camel에서는 아래와 같이 새 경로를 생성하여 이 작업을 수행합니다.

경로는 진입점 역할을 하는 direct:op-delete 엔드포인트에서 시작됩니다. 문서를 삭제해야 하는 경우 해당 문서의 식별자 (_id) 가 메시지 본문으로 수신됩니다. 그런 다음 경로에서는 메시지 본문에서 _id를 추출하는 간단한("${body}") 을 사용하여 이 식별자 값으로 indexId 헤더를 설정합니다.

마지막으로, 메시지는 URI_DELETE_OPERATION에 의해 지정된 엔드포인트로 전달되며, 이 엔드포인트는 해당 인덱스에서 문서 제거 작업을 수행하기 위해 Elasticsearch에 연결됩니다.
이제 경로를 생성했으므로, Elasticsearch 구성 요소를 포함하도록 구성된 Camel 컨텍스트 (DefaultCamelContext) 를 생성할 수 있습니다.

다음으로 OperationDeleteRoute 클래스에 의해 정의된 삭제 경로가 컨텍스트에 추가됩니다. 컨텍스트가 초기화된 상태에서 ProducerTemplate 을 사용하여 삭제해야 하는 문서의 식별자를 direct:op-delete 엔드포인트로 전달하면 삭제 경로가 트리거됩니다.

결론

Apache Camel과 Elasticsearch의 통합을 통해 강력하고 효율적인 데이터 수집이 가능하며, 색인, 업데이트, 삭제와 같은 다양한 데이터 조작 시나리오를 처리할 수 있는 경로를 정의할 수 있는 Camel의 유연성을 활용할 수 있습니다. 이 설정을 사용하면 복잡한 프로세스를 확장 가능한 방식으로 오케스트레이션하고 자동화하여 Elasticsearch에서 데이터를 효율적으로 관리할 수 있습니다. 이 예는 이러한 도구를 함께 사용하여 데이터 수집을 위한 효율적이고 적응력 있는 솔루션을 만드는 방법을 보여줍니다.

참고 자료

자주 묻는 질문

아파치 카멜이란 무엇인가요?

Apache Camel은 다양한 시스템 연결을 간소화하는 오픈소스 통합 프레임워크로, 개발자는 시스템 통신의 복잡성에 대한 걱정 없이 비즈니스 로직에 집중할 수 있습니다.

관련 콘텐츠

최첨단 검색 환경을 구축할 준비가 되셨나요?

충분히 고급화된 검색은 한 사람의 노력만으로는 달성할 수 없습니다. Elasticsearch는 여러분과 마찬가지로 검색에 대한 열정을 가진 데이터 과학자, ML 운영팀, 엔지니어 등 많은 사람들이 지원합니다. 서로 연결하고 협력하여 원하는 결과를 얻을 수 있는 마법 같은 검색 환경을 구축해 보세요.

직접 사용해 보세요