티스토리 뷰
- 커넥트 : 데이터 스트리밍 프레임워크
- 커넥터 : 프레임워크에서 사용하는 플러그인들
- source connector : producer 역할
- sync connector : consumer 역할
https://bagbokman.tistory.com/m/8
https://techblog.pet-friends.co.kr/데이터-싱크를-위한-msk-connect-도입-feat-cdc-뽀개기-b1f341b495f
책 내용
목표: 가상의 자전거 회사의 데이터를 다양한 용도로 활용할 수 있도록 데이터 스트리밍 시스템 구축
요구사항: 빅뱅방식 말고 데이터를 점진적으로 이동
- 기본적인 소스 커넥터 구축: 애플리케이션 로그파일을 카프카 토픽으로 옮기기
- SQLite 컨플루언트 커넥터를 사용하여 싱크 커넥터 구축
- 최신형 센서를 위한 맞춤 소스커넥터 만들기
- 데이터 사일로 문제 해결 필요: 데이터를 데이터 소유자 외에도 누구나 사용할 수 있어야 한다
- 데이터 사일로는 서로 분리되어 기업의 다른 부서에서 액세스할 수 없는 데이터 스토리지 및 관리 시스템을 의미합니다. 데이터가 개별 시스템 또는 데이터베이스에 유지되어 서로 통신 또는 정보 공유가 불가능한 경우에 발생합니다.
- 컨슘 실패 시 데이터를 복구할 수 있어야 한다
- (--from-beginning 옵션 사용, 카프카 토픽 리플레이 기능 사용)
- 요구사항에 따라 달라지는 설계데이터 처리 방식 설계를 위한 질문감사로그 얼럿 추세 크리티컬 얼럿
시스템에서 메시지를 잃어도 괜찮은가? Y N N 어떤 방식으로든 데이터를 그룹화해야 하는가? N Y Y 특정 순서로 데이터를 전달해야 하는가? N N N 특정 항목의 마지막 값만 필요한가? 아니면 해당 항목의 이력이 중요한가? N N Y 독립된 컨슈머 지원 필요? Y Y N - 카프카 솔루션을 설계하려면 먼저 데이터를 이해해야 한다
https://devocean.sk.com/blog/techBoardDetail.do?ID=164096
Apache Avro
https://p-bear.tistory.com/48#google_vignette
Avro란 Apache에서 만든 프레임워크로 데이터 직렬화 기능을 제공한다.
JSON과 비슷한 형식이지만, 스키마가 존재한다.
Avro = schema + binary(json value)
binary 데이터이면 mongoDB의 BSON과 비슷한가?
- GPT에 의하면
1. 공통점- 바이너리 형식
- JSON처럼 사람이 읽을 수 있는 텍스트 형식이 아니라, 바이너리 데이터로 변환하여 크기를 줄이고 처리 속도를 높이는 데 최적화되어 있습니다.
- 이로 인해 JSON보다 데이터 크기가 작고, 직렬화/역직렬화 속도가 빠릅니다.
- 스키마 기반 데이터 관리
- 두 포맷 모두 데이터 구조를 명확히 정의할 수 있습니다. BSON은 MongoDB의 데이터 타입을 지원하며, Avro는 스키마를 명시적으로 작성하여 데이터 구조를 관리합니다.
2. 주요 차이점특징 Apache Avro MongoDB BSON목적 Kafka와 같은 메시징 시스템에서 데이터를 직렬화 MongoDB에서 데이터 저장 및 쿼리를 위해 설계 스키마 관리 외부 스키마(Avro Schema Registry 등) 필요 스키마리스(schema-less) 지원 데이터 타입 JSON과 유사한 타입 + 추가적인 고유 타입 MongoDB의 특화된 타입(Date, ObjectId 등) 데이터 크기 작고 효율적 (압축 최적화) 약간 더 크며, 데이터에 타입 정보를 포함 스키마 진화 지원 지원 (Backward/Forward Compatibility) 스키마 진화는 MongoDB 레벨에서 유연하게 처리 사용 환경 분산 시스템 및 메시징 시스템 MongoDB 데이터베이스 이진 데이터 지원 별도의 타입 (e.g., bytes) 기본적으로 이진 데이터 타입(BinData) 지원
3. 스키마 관리 차이- Apache Avro는 명시적 스키마를 사용합니다.
- 데이터를 직렬화할 때 스키마를 기반으로 데이터 구조를 정의합니다.
- 데이터 스키마는 Schema Registry나 Kafka 메시지 헤더에 저장되며, 데이터 소비자가 스키마를 참조해야 데이터를 읽을 수 있습니다.
- 이 방식은 데이터 호환성을 보장하며, 대규모 분산 시스템에서 유용합니다.
- BSON은 MongoDB의 특성에 맞게 스키마리스로 설계되었습니다.
- MongoDB에서 데이터를 저장할 때 명시적인 스키마가 없어도 유연하게 사용할 수 있습니다.
- 하지만, MongoDB를 운영하며 스키마를 강제하고 싶을 경우, Schema Validation을 설정해야 합니다.
4. 데이터 타입- Apache Avro는 JSON과 비슷한 데이터 타입(e.g., string, int, float)을 지원하지만, BSON처럼 MongoDB 고유의 타입(ObjectId, Date, BinData 등)을 지원하지는 않습니다.
- BSON은 MongoDB에 특화된 타입들이 포함되어 있어, MongoDB 내에서 데이터 처리와 쿼리를 최적화할 수 있습니다.
5. 데이터 크기와 성능- Apache Avro는 크기를 줄이기 위해 데이터 타입 정보를 따로 저장하지 않고, 스키마를 기반으로 직렬화합니다. 이로 인해 데이터 크기가 더 작고 성능이 뛰어납니다.
- BSON은 각 필드에 데이터 타입 정보를 포함하기 때문에, Avro보다는 조금 더 큰 크기를 가지지만, MongoDB에서 데이터를 효율적으로 쿼리하고 저장하기 위해 설계되었습니다.
6. 사용 사례- Apache Avro
- 분산 시스템에서 고속 데이터 전송, 스키마 관리가 필요한 경우 적합합니다.
- Kafka, Hadoop, Spark와 같은 빅데이터 환경에서 주로 사용됩니다.
- MongoDB BSON
- MongoDB에서 데이터를 저장하거나 쿼리하는 데 최적화된 포맷입니다.
- MongoDB 내부의 기본 데이터 형식으로 동작하며, 다른 시스템으로 데이터를 전송하거나 통합할 때는 JSON 또는 Avro 등으로 변환이 필요할 수 있습니다.
요약즉, MongoDB의 BSON은 Avro와 비슷하지만, Avro는 메시징 및 데이터 교환에 중점을 두고 설계되었기 때문에 사용 목적과 환경에 따라 차이가 있습니다. - 바이너리 형식
- Apache Avro와 BSON은 모두 바이너리 포맷으로 크기와 성능을 최적화하지만, Apache Avro는 메시징 및 분산 시스템에 적합한 형식이고, BSON은 MongoDB 내부에서 효율적으로 데이터를 저장하고 쿼리하기 위한 형식입니다.
- 네, Apache Avro와 MongoDB의 BSON은 유사한 점이 있지만, 완전히 같지는 않습니다. 둘 다 바이너리 포맷으로 데이터를 직렬화하는 방식이지만, 그 목적과 동작 방식에서 차이가 있습니다. 아래에서 두 포맷을 비교해 보겠습니다.
우리회사는 apache avro 안쓰던데?
→ 스프링에서 제공하는 시리얼라이저/디시리얼라이저를 사용
Apache Kafka는 레코드 값과 키를 직렬화 및 역직렬화하기 위한 고급 API를 제공합니다. 일부 내장 구현과 함께 org.apache.kafka.common.serialization.Serializer<T>및 추상화와 함께 제공됩니다. 한편, 또는 구성 속성을 사용하여 직렬화기 및 역직렬화기 클래스를 지정할 수 있습니다. 다음 예는 이를 수행하는 방법을 보여줍니다.org.apache.kafka.common.serialization.Deserializer<T>ProducerConsumer
https://docs.spring.io/spring-kafka/reference/kafka/serdes.html
'Kafka' 카테고리의 다른 글
[카프카] 컨슈머가 데이터를 읽어오는 방식 (0) | 2025.03.17 |
---|---|
[카프카] sticky partitioner 전략 (0) | 2025.03.14 |
[카프카] bootstrap server 연결 구조 (0) | 2025.03.12 |
[카프카] 프로듀서 (0) | 2025.03.10 |
[카프카] 토픽, 파티션, 컨슈머 그룹, 컨슈머 관계 (0) | 2024.12.15 |
- Total
- Today
- Yesterday
- 리눅스 컨테이너
- 대규모 데이터 처리
- kubernetes
- NoSQL
- 라라벨
- 샤딩
- k8s
- laravel 테스트코드
- mongoDB
- 쿠버네티스
- index
- docker
- 몽고디비
- java
- php
- Container
- 카프카
- laravel
- database
- mockery
- JUnit
- pods
- springboot
- laravel 테스트
- phpUnit
- 분산처리
- Infra
- devops
- kafka
- MySQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |