SDK 팀을 대표하여 Apache Spark 2.0.x 시리즈와의 호환성을 가장 중요하게 제공하는 Couchbase Spark Connector의 두 번째 주요 버전 출시를 발표하게 되어 기쁘게 생각합니다.
커뮤니티 기여자에게 특별한 감사를 드립니다. 루카 로셀리니 그리고 시반쉬 스리바스타바 커넥터에 기여하고 이번 릴리스를 위해 커넥터를 완성하는 데 도움을 준 두 분을 소개합니다.
받기
이전과 마찬가지로 아티팩트는 다음 좌표로 Maven Central에 게시됩니다:
- groupId:com.couchbase.client
- 아티팩트아이디: spark-connector_2.10 또는 spark-connector_2.11
- 버전: 2.0.0
sbt를 사용하는 경우, "com.couchbase.client" %% "spark-connector" % "2.0.0"을 사용하면 됩니다.
또한 다음을 통해서도 게시됩니다. spark-packages.org 아카이브로도 다운로드할 수 있습니다( Scala 2.10 뿐만 아니라 Scala 2.11).
하이라이트
이번 릴리스에서는 Spark 2.0.x와의 호환성 및 다양한 버그 수정 외에도 향상된 Spark 스트리밍 지원과 함께 다음에 대한 초기 지원이 제공됩니다. 구조화된 스트리밍.
스파크 스트림
커넥터는 이전에 다음과 같은 기능을 실험적으로 지원했습니다. DStreams 는 Java SDK의 일부인 DCP(카우치베이스 변경 프로토콜) 구현을 기반으로 구축되었습니다. 여러 가지 이유로 인해 문제가 발생했고 그 결과 독립형 구축에 상당한 노력을 기울이고 있습니다. DCP 클라이언트 오버헤드가 적고 안정적이며 생산에 바로 사용할 수 있습니다.
Spark Connector 2.0.0은 이 새로운 클라이언트의 사전 릴리스를 기반으로 구축되었으며, 앞으로 종속성과 함께 구현이 안정화될 것입니다. 그 결과 현재 구현에서는 처음으로 변경 사항을 스트리밍하면서 클러스터를 동적으로 확장할 수 있으며, 자동 흐름 제어는 물론 노드 장애 발생 시 간단한 투명 롤백 처리도 지원합니다.
API 관점에서 보면 이러한 모든 변경 사항은 투명하며, 스트림을 시작하고 메시지를 소비하는 데 동일한 메서드가 사용됩니다. 다음은 DStream을 생성하고 서버에서 도착하는 모든 변경 및 삭제를 출력하는 예제입니다. 처음부터 스트리밍을 시작하거나 "지금"부터 스트리밍을 시작할 수 있으며, 여기서 "지금"은 현재 시스템 상태이므로 향후 변경 및 삭제만 스트림을 통해 전송됩니다.
다음 버전에서는 스파크 노드 장애 및 애플리케이션 재시작 시 더 잘 견딜 수 있도록 스냅샷 정보 유지 및 상태 복원에 대한 지원을 제공할 계획입니다. 지금 당장 이러한 보장이 필요한 경우, 현재 이미 스파크 기능을 사용하여 이를 제공하고 있는 구조화된 스트리밍 지원을 읽어보세요.
구조화된 스트리밍
구조화된 스트리밍에 대한 지원도 새로운 DCP 클라이언트를 기반으로 하지만, 현재 Spark는 변형을 추가 전용 테이블 구조로 취급하기 때문에 문서 변경 사항만 스트리밍되고 삭제는 무시됩니다. 삭제가 Spark에 제대로 신호를 보낼 수 있게 되면 이에 대한 지원도 제공할 예정입니다.
커넥터는 소스 또는 싱크로 모두 사용할 수 있도록 지원합니다.
스파크는 컨선가 스트리밍 시 자체 WAL(Write Ahead Log)과 스냅샷을 유지하므로 (향후 버전에서 원하는 만큼 효율적이지는 않지만) 최근 소비된 변이로부터 상태를 투명하게 다시 시작할 수 있습니다.
테이블 추상화에는 일종의 스키마가 필요하므로 문서에 따라 사용자 정의 스키마를 제공하는 것이 좋으며, 그렇지 않으면 기본 스키마가 사용되어 작동하지만 변경 내용에 대한 제한된 통찰력만 제공합니다. 기본 스키마는 다음과 같습니다:
다음 예는 "travel-sample" 버킷의 모든 돌연변이를 스트리밍한 다음 제공된 스키마로 마샬링하는 방법을 보여줍니다. 모든 돌연변이를 그냥 인쇄하는 것은 그다지 흥미롭지 않기 때문에 '유형' 필드에 따라 그룹화하고 나타나는 횟수를 인쇄합니다:
스파크는 총 개수를 유지하므로 서버 UI에서 문서 중 하나를 변경하면 스파크 로그에서 해당 유형의 개수가 하나씩 늘어나는 것을 볼 수 있습니다.
스트림 소스로서 기능하는 것 외에도 결과를 다시 Couchbase에 저장하는 싱크로 사용할 수도 있습니다. 한 가지 중요한 측면은 다음 예제에서 설명하는 것처럼 문서 ID로 사용할 열을 지정하는 것입니다:
이 예는 소켓 스트림을 사용하고, 수신된 회선에서 단어 개수를 수행한 다음 그 개수를 Couchbase에 저장합니다. 단어 자체가 문서 ID로 사용되도록 "idField"가 "value"로 설정되어 있는 점에 주목하세요.
마지막으로 구조화된 스트리밍 자체는 Apache Spark에서 실험 단계로 표시되어 있으므로 구현이 변경되고 성숙해짐에 따라 구현도 조정될 것입니다. 새로운 기능인 만큼 피드백과 버그 보고도 적극적으로 받고 있습니다.
실제로 보기
시도해보고 싶지만 구체적인 예제가 없다면 다음을 확인하는 것이 좋습니다. 샘플 저장소 를 통해 '여행 샘플' 버킷을 기반으로 다양한 예시를 제공합니다.
이번 주 브뤼셀에서 열리는 스파크 서밋 유럽에 참석하신다면 커넥터에 대한 강연이 있습니다. "Spark로 운영 데이터베이스 강화하기" 에서 동기 부여와 내부에 대해 자세히 알아볼 수 있습니다.
마지막으로, 베이 지역에 거주하거나 다음을 방문하는 경우 카우치베이스 연결 Spark와 Couchbase Server와의 통합에 대한 여러 프레젠테이션이 있을 예정이니 많은 참석 부탁드립니다!