RSS Etsy Engineering | 코드는 예술입... 노트

RSS Etsy Engineering | 코드는 예술입니다.

Etsy의 Codeascraft는 컴퓨터 프로그래밍과 전통적인 공예가 만나는 예술가 콜라보레이션입니다. 이 프로젝트는 유명한 프로그래머와 예술가들이 함께 만들어낸 다양한 디지털 예술작품을 테크 애호가들을 위한 기념품으로 변환합니다. 이러한 작품에는 바이너리 알고리즘의 인쇄된 표현이 있는 유리 촛불 홀더, 바이너리 숫자 목걸이, 유리 종이 무게에 갇힌 디지털 비트 초상화 등이 포함됩니다. Codeascraft는 기술과 공예 사이의 간격을 좁히는 데 초점을 맞추고 있습니다. 코드 애호가들을 위한 독특한 수집품을 제공합니다.

노트 스레드

Etsy의 마켓플레이스는 다양한 수제 및 독특한 제품을 특징으로 하며, 효과적인 검색 및 추천을 위해서는 미묘한 이해가 필요합니다. 현재의 제품 정보는 풍부하지만 종종 구조화되지 않아 머신러닝 모델이 완전히 활용하기 어렵습니다. 핵심 과제는 원시 데이터와 각 제품의 매력을 정의하는 복잡한 세부 정보 간의 격차를 해소하는 데 있습니다. 해결책은 강화 학습 접근 방식과 대조 신호를 사용하는 것을 포함합니다. 이 방법은 구매자 참여 데이터를 사용하여 차별화되는 특징을 강조하는 간결한 제품 요약을 생성하도록 LLM을 미세 조정합니다. 이는 구매자의 선택에 따라 세부 정보를 우선시하도록 모델을 훈련함으로써 달성되며, 관련성 예측을 개선합니다. 모델은 검색 상호 작용 데이터에 대해 훈련되며, 구매자가 다른 목록보다 특정 목록을 선택하게 만든 특징을 강조하는 요약에 보상을 제공합니다. 이러한 강화 학습은 검색 관련성 지표 개선으로 이어지는 요약을 생성하도록 모델을 유도합니다. 인간 평가 및 정량적 오프라인 테스트는 요약의 높은 품질과 다운스트림 모델에 미치는 영향, 성능 향상을 입증했습니다. 이 접근 방식은 판매자의 창의성을 반영하여 엄격한 정의가 아닌 구매자 행동에 기반한 제품 이해에 중점을 둡니다. 향상된 제품 이해는 궁극적으로 구매자가 자신의 취향에 맞는 제품을 발견하도록 도와 쇼핑 경험을 개선합니다. 결과적으로 간결한 요약은 유사한 제품 목록을 차별화하는 주요 특징을 강조합니다. 이 프로젝트는 단순히 키워드와 같은 텍스트 특징만을 사용하는 것에 비해 중요한 제품 세부 정보를 표면화하는 데 강력한 능력을 보여주었습니다.
CdXz5zHNQW_UugGSCbu5d.jpeg
에스티(Etsy)는 구매자 참여도와 판매자 가시성을 향상시키기 위해 광고 검색 순위 모델을 개선했습니다. 목표는 더 관련성이 높은 광고 목록을 표시함으로써 구매 의도를 더 잘 예측하는 것이었습니다. 이는 두 가지 주요 개선 사항을 통해 달성되었습니다. 멀티게이트 믹스처 오브 엑스퍼츠(Multigate Mixture of Experts, MMoE) 아키텍처를 통합하고, 장바구니에 추가를 보조 신호로 사용하는 것입니다.원래의 멀티태스크 모델은 클릭률(CTR)과 클릭 후 전환률(PCCVR)을 최적화했지만, 구매 여정의 후반부에서 데이터 희박성 문제를 겪었습니다. MMoE는 멀티태스크 학습에서 발생하는 "시소 현상"을 해결합니다. 여기서 하나의 태스크를 최적화하면 다른 태스크가 저하될 수 있습니다. MMoE는 전문가와 게이트를 도입하여 태스크가 고유한 패턴을 학습할 수 있으면서도 공유된 표현에서 이점을 얻을 수 있습니다.MMoE 아키텍처는 공유된 하위 계층과 전문가로 구성되어 있습니다. 여기서 전문가는 평행한 하위 네트워크로 다른 데이터 패턴을 학습합니다. 각 태스크에는 전문가 출력을 조합하는 방법을 제어하는 게이팅 네트워크가 있으며, CTR과 PCCVR 모두를 최적화합니다.MMoE를 조정하는 과정에는 전문가의 수, 크기, 유형을 실험하는 것이 포함되었습니다. 이질적인 전문가(DCN 및 MLP 기반)는 개선된 지표를 보여주었습니다. 그러나 전문가 사용과 전문화를 보장하는 것이 어려웠습니다.전문가 드롭아웃 및 온도 스케일링과 같은 정규화 기술을 사용하여 이러한 문제를 해결했습니다. 온도 스케일링은 전문가 선택의 확률 분포를 부드럽게 하여 전문가 사용과 전문화를 모두 촉진하는 데 더 효과적이었습니다.클릭과 구매 이외에도 에스티는 장바구니에 추가와 즐겨찾기와 같은 다른 사용자 상호작용의 가치를 인식했습니다. 이러한 동작은 높은 구매 의도를 나타내며, 구매보다 더 빈번하게 발생하여 모델에 더 강한 신호를 제공합니다.보조 태스크, 특히 장바구니에 추가를 도입하면 모델이 사용자 참여에 대한 더 일반화된 표현을 학습할 수 있습니다. 이는 더 빈번한 신호를 사용하여 희박한 구매 예측을 이점을 주어 궁극적으로 더 효과적인 순위 시스템을 만듭니다.
CdXz5zHNQW_Ply7jT2xQK.jpeg
2010년부터 Etsy의 데이터베이스 아키텍처는 자체 ORM으로 관리되는 샤딩된 MySQL 클러스터를 기반으로 했습니다. 수천 개의 샤드로 구성된 이 시스템은 수동적인 확장과 인덱스 데이터베이스의 단일 실패 지점이라는 문제에 직면했습니다. 인덱스 데이터베이스는 샤드 매핑을 저장하여 ORM이 쿼리를 효율적으로 라우팅하는 것을 방해하고 잠재적인 사이트 중단을 유발했습니다. 이러한 문제를 해결하기 위해 Etsy는 2018년에 오픈 소스 데이터베이스 확장 도구인 Vitess를 도입했습니다. 기존 샤딩 로직을 복제하기 위해 Vitess 내에 사용자 정의 vindex를 구현하여 전체 데이터 마이그레이션을 피했습니다. 여기에는 점진적인 전환을 위해 SQLite 조회 vindex 및 하이브리드 vindex를 생성하는 작업이 포함되었습니다. Vitess로의 마이그레이션은 위험을 최소화하고 쿼리 비호환성을 테스트하기 위해 테이블별로 점진적으로 수행되었습니다. 데이터베이스 트랜잭션 관련 문제로 인해 관련 테이블을 동시에 마이그레이션해야 했으며, 이는 상호 의존성을 강조했습니다. Vitess의 크로스 샤드 쿼리 기능은 성능을 크게 향상시켰지만, 스캐터 쿼리는 신중하게 관리되었습니다. 궁극적으로 Vitess 마이그레이션은 단일 실패 지점을 제거하고 개발자가 데이터에 쉽게 접근할 수 있도록 했으며, 사용자에게는 거의 눈에 띄지 않는 성능 향상을 제공했습니다. 또한 수동 확장을 크게 개선하고 새로운 Vitess 기능을 사용할 수 있게 했습니다.
CdXz5zHNQW_LPveoPxaAk.jpeg
CdXz5zHNQW_2IBkaI4nUO.jpeg
CdXz5zHNQW_8gTIiBrymu.jpeg
"Etsy는 브라우징 및 구매 기록을 기반으로 상세하고 익명의 구매자 프로필을 만들기 위해 대규모 언어 모델(LLM)을 활용합니다. 이러한 프로필은 미묘한 관심사와 쇼핑 목적을 포착하여 플랫폼의 거의 9천만 명의 구매자에게 개인화를 강화합니다. 기술 구현에는 사용자 활동 데이터를 검색한 다음 LLM에 프롬프트를 사용하여 이 데이터를 해석하여 프로필을 생성하는 것이 포함됩니다. 이 프로세스를 확장 가능하고 비용 효율적으로 만들기 위해 Etsy는 데이터 소스를 최적화하고, 입력 토큰 볼륨을 줄이고, 배치 크기를 늘리고, 병렬 처리를 사용했습니다. 이러한 최적화는 구매자 프로필 생성 시간과 비용을 대폭 줄였습니다. 생성된 구매자 프로필은 쿼리 재작성 및 정제 알약(refinement pills)을 통해 검색 경험을 개인화하는 데 적용됩니다. 쿼리 재작성은 예측된 관심사로 사용자 검색을 풍부하게 하고, 정제 알약은 사용자 선호도를 기반으로 클릭 가능한 필터를 제공합니다. Etsy는 클릭률 및 전환율 증가와 같은 지표를 통해 이러한 개인화의 성공을 측정합니다. 또한 사용자 활동에 따라 동적으로 새로고침하고 관심사 드리프트(interest drift)를 감지하여 프로필 정확도를 유지합니다. 향후 작업에는 상속 프로필(inheritance profiles)을 실험하여 신규 사용자의 "콜드 스타트(cold start)" 문제를 해결하는 것이 포함됩니다. 궁극적으로 Etsy는 모든 쇼핑객을 위한 검색을 개선하고 보다 직관적인 검색 경험을 만드는 것을 목표로 합니다."
CdXz5zHNQW_Nxw1u6jGOy.jpeg
Etsy의 "장인정신을 다하다"라는 지침 원칙에 따라, Etsy는 안드로이드 앱 개발을 위한 선호 수단으로 네이티브 UI를 정의하는 최신 툴킷인 Jetpack Compose를 채택했습니다. 구조적인 접근 방식을 통해 Compose를 연구하고 구현했으며, 엔지니어들은 교육 과정을 만들고 정보 세션을 개최하여 팀에 교육했습니다. 디자인 시스템 팀은 내부 UI 툴킷 구성 요소의 Compose 버전을 만들어 주요 채택 전에 디자인 시스템을 완벽하게 구현했습니다. Compose의 기존 툴킷 구성 요소와의 상호 운용성을 통해 원활한 마이그레이션 경로를 확보했습니다. 팀은 Compose를 사용하여 전체 화면을 재구축하여 탐색 및 데이터 페치와 같은 더 넓은 범위의 문제에 직면했습니다. 성공적인 재작성 후, 복잡한 바닥 시트부터 시작하여 Compose를 실제 사용자에게 배포했습니다. 그런 다음 Shop 화면을 Compose를 사용하여 재구축하여 초기 화면 렌더링 시간을 5% 단축하고 사용자 상호 작용을 개선했습니다. Compose 채택은 또한 엔지니어들이 코드 줄 수 감소와 더 쉬운 테스트를 보고하면서 개발자 만족도를 향상시켰습니다. Compose와 Macramé 아키텍처의 조합은 앱 기능을 구축하는 표준 방식이 되었습니다. 전반적으로 Etsy의 Compose 채택은 학습 곡선과 과정 중 발생하는 어려움에도 불구하고 팀에게 기회와 효율성을 제공했습니다.
CdXz5zHNQW_mxNDOlthCn.jpeg
2023년 7월, Etsy의 앱 업데이트스 팀은 업데이트스 피드를 쿠폰 및 세일 허브인 Deals로 개편하는 프로젝트를 시작했습니다. 팀은 현대 기술인 Swift UI와 Tuist를 사용하여 새로운 탭을 완전히 새로 개발하는 것을 고려했습니다.ambition과 현실을 균형잡으면서, 팀은 하이브리드 접근 방식을 채택하여 Swift UI를 모듈식 개발 및 미리보기 가능성을 위해 사용하고, 네비게이션 및 기타 기능에 대한 기존 UIKit 코드베이스와 통합했습니다.Swift UI의 모듈식 구조는 뷰를 재사용 가능한 구성 요소로 나누어 빠른 개발 및 Tuist와 함께 효율적인 미리보기를 가능하게 했습니다.Decodable 모델을 사용하여 API 파싱을 분명하고 효율적으로 처리할 수 있었고, 뷰 구축 및 옵셔널 처리를 간소화했습니다.미리보기 열거형을 도입하여 복잡한 뷰에 대한 모의 데이터 생성을 간소화하여 API 지원이 완료되기 전에 모듈을 구축할 수 있었습니다.그러나 기존 코드베이스와의 통합은 특히 네비게이션 및 즐겨찾기와 같은 영역에서 어려움을 초래했습니다.이러한 문제를 해결하기 위해, 팀은 DealsAction이라는 사용자 정의 @Environment 구조를 생성하여 네비게이션 책임을 주요 대상으로 되돌려보냈고, Swift UI의 callAsFunction() 기능을 유지했습니다.환경 개체를 사용하여 다른 기능, 즉 상점 팔로우, 성능 지표 로깅 등도 구현했습니다.이 하이브리드 접근 방식은 현대 기술의 이점을 활용하면서 레거시 코드베이스의 제약을 존중하는 데 성공하여 사이버 위크 데드라인 전에 제품을 성공적으로 출시할 수 있었습니다.
에스티(Etsy)의 기능 시스템 팀은 기계 학습 모델에서 타임스탬프 기능을 사용할 때 정밀도 오해로 인해 잠재적인 문제를 발견했습니다.이 문제는 타임스탬프 데이터 유형에서 비롯되었으며, 다른 프레임워크에서 다르게 해석되어 잠재적인 훈련/서비스 왜곡을 초래했습니다.이를 해결하기 위해 ML 전문가들은 타임스탬프 유형을 피하고 더 기본적인 숫자 유형, 즉 Longs를 사용하는 것을 권장했습니다.팀은 근본 원인을 조사하여 문제가 특정 버그를 넘어서 더 큰 문제를 나타내며, ML 전문가들이 타임스탬프 기능을 다루는 데 어려움을 겪고 있음을 발견했습니다.팀은 datetime 객체와 타임스탬프 유형의 복잡성이 특정 정밀도로 정수 표현만 필요로 하는 자신의 사용 사례에 불필요하다는 것을 깨달았습니다.아키텍처 워킹 그룹 회의에서, 모델 훈련과 추론 간 일관성을 보장하기 위해 datetime 기능을 원시 숫자 유형으로 표현하는 데 동의했습니다.팀은 모든 훈련 컨텍스트에서 일관성을 촉진하기 위해 더 일반적으로 원시 유형을 표준화하기로 결정했습니다.팀은 또한 고객이 기능 변환을 단순화하기 위해 문서화 개선을 필요로 한다는 것을 인식했습니다.이 사건은 소프트웨어 엔지니어링 관행을 ML 특정 요구 사항에 적용하는 데 잠재적인 도전을 강조했습니다.ML이 소프트웨어 시스템에 통합됨에 따라 이러한 종류의 세부 사항은 더 일반적이 될 것이며, 최선의 관행을 더욱 정교화할 필요가 있을 것입니다.에스티 팀의 경험은 ML 모델에서 타임스탬프 기능을 사용할 때 주의해야 할 사항을 보여주며, 일관성과 정확성을 보장하기 위해 원시 숫자 유형을 사용하는 것이 중요하다는 것을 강조합니다.
에스티의 이미지 검색 기능은 사용자가 업로드한 사진과 유사한 항목을 검색할 수 있도록 합니다. 이 기능은 기계 학습 모델을 사용하여 이미지로 부터 숫자 표현을 추출하여 유사성 검색에 사용합니다.이 모델은 이미지 임베딩을 학습하기 위해 미리 학습된 합성곱 신경망(CNN)을 기반으로 하며, 항목 카테고리, 색상 및 속성과 같은 여러 분류 작업을 동시에 수행하는 다중 작업 학습 접근 방식을 사용하여 학습됩니다.고품질 제품 이미지를 사용하여 편향을 줄이기 위해, 모델은 사용자 제출 리뷰 사진 데이터 세트로도 학습됩니다.추론 파이프라인에는 검색 성능을 최적화하기 위해 역파일(IVF) 알고리즘을 사용하여 근사 최근접 이웃(ANN) 인덱스를 구축합니다.쿼리 사진은 실시간으로 GPU 추론 기술을 사용하여 빠른 응답 시간을 보장합니다.이미지 검색 기능은 에스티의 CodeMosaic 해커톤에서 처음 개발되었으며 이후 프로덕션 기능으로 구현되었습니다.이 기능은 구매자에게 새로운 검색 방법을 제공하여 에스티에서 고유하고 특별한 항목을 발견할 수 있도록 도와줍니다.모델의 아키텍처와 학습 목표는 시각적으로 일관된 결과를 생성하면서 카테고리 정확성을 유지하도록 최적화되었습니다.리뷰 사진을 학습 데이터 세트에 추가하면 모델이 사용자 제출 사진에서 관련 결과를 제공하는 능력이 크게 향상되었습니다.이 기능은 사용자로부터 좋은 반응을 얻었으며 에스티에서 구매자 참여도와 만족도를 높이는 데 기여했습니다.
에스티(Etsy)는 사용자에게 관련된 항목을 제시하기 위해 추천 모듈을 사용하며, 각 모듈은 관련성에 따라 후보 항목을 점수를 매기는 랭커(ranker)로 구동됩니다. 전통적으로 에스티는 모듈별 랭커를 사용했지만, 모듈의 수가 증가함에 따라 이 접근 방식은 관리하기 어려워졌습니다.이를 해결하기 위해 에스티는 여러 모듈을 구동할 수 있는 표준 랭커(canonical ranker)를 개발했습니다. 이는 효율성과 일관성을 보장합니다. 첫 번째 표준 랭커는 방문 빈도를 중점으로 하며, 재방문에 대한 대리 변수로 즐겨찾기 비율을 사용했습니다.빈도 랭커의 모델 구조는 공유된 하위 구조(shared-bottom architecture)와 즐겨찾기 및 구매 예측을 위한 별도의 계층을 포함하며, 최종 랭킹 점수로 결합됩니다. 랭커는 또한 모듈 이름 특징과 모듈 간의 균형 잡힌 훈련 데이터를 통합하여 일반화 가능성을 보장합니다.한정된 모듈의 데이터로 훈련에도 불구하고, 표준 랭커는 훈련에 사용되지 않은 모듈에서 모듈별 랭커를 능가하여 표준 솔루션으로서의 효율성을 입증했습니다.빈도 랭커는 항목 페이지 및 홈페이지 모듈에서 즐겨찾기 비율을 개선했으며, 구매 지표 및 기타 참여 지표에서 상당한 개선이 있었습니다.출시 이후 에스티는 웹 및 앱 플랫폼에서 여러 모듈에 표준 랭커를 배포했습니다.앞으로 에스티는 빈도 랭커를 반복적으로 개선하며, 더 많은 컨텍스트를 통합하고 새로운 아키텍처를 탐색할 계획입니다.표준 랭커는 에스티의 추천 전략에 대한 변화를 나타내며, 플랫폼 및 모듈 간에 더 개인화된 추천과 일관된 사용자 경험을 제공합니다.
기계 학습 (ML) 모델 배포는 실험에서 엄격한 엔지니어링 제약으로의 전환을 포함하여 유연성과 안정성 사이의 균형을 맞추는 데 어려움이 있습니다.Etsy의 ML 플랫폼 팀은 Kubernetes를 사용하여 모델 크기 조정 및 오케스트레이션을 처리하고, Barista가 모델 배포를 관리합니다.처음에는 모델 구성이 코드로 관리되어 엄격한 제어를 제공했지만 지연 및 병목 현상이 발생했습니다.이러한 문제를 해결하기 위해 구성이 분리되어 데이터베이스에 저장되었습니다. 이렇게 되면 CLI를 통해 즉시 변경할 수 있었습니다.그러나 CLI는 기술적 지식이 필요했으므로 모델 관리를 위한 사용자 친화적 웹 인터페이스를 개발하게 되었습니다.Barista 웹 인터페이스는 배포에 대한 포괄적인 제어를 제공하고 다양한 API와 통합하며 배포 프로세스를 간소화합니다.증가하는 모델 배포 속도는 비용 및 잘못된 구성에 대한 우려를 초래하여 사용되지 않는 배포를 자동으로 크기 조정하는 Kube Downscaler를 구현하게 되었습니다.기본적인 기술 요구 사항을 충족하는 데 초점을 맞추는 것에서 완전한 제품을 구축하여 ML 사용자를 강화하는 데로 초점이 이동했습니다.현재의 노력은 서비스의 일관성 및 자동화를 향상시키는 데 초점을 맞추고 있습니다. 이를 통해 인프라 설정을 최적화하고 클라우드 비용을 추가로 줄이려 합니다.ML 실천이 확장됨에 따라 플랫폼은 팀의 증가하는 요구 사항을 충족하는 데 지속적으로 진화해야 합니다.
처음에는 Kafka 브로커의 플랫폼 업그레이드가 지루하고 시간이 걸리는 작업이었으며, 수 시간 동안 수동적으로 모니터링하고 기다려야 했다. 이를 개선하기 위해 다중 존 아키텍처를 구현했는데, 이는 여러 브로커가 동시에 업데이트될 수 있도록 허용하여 가용성을 영향을 주지 않았다. 그러나 Kubernetes의 기본 롤링 업데이트 전략은 복제본의 존 분포로 인해 적합하지 않았다.커스텀 논리를 개발하여 업데이트를 제어할 수 있도록 했다. 이렇게 하면 존 내부의 여러 브로커가 동시에 다시 시작할 수 있었다. 이를 Kubernetes 배치 작업으로 구현하여 안정성을 보장하고 실수로 인한 배포 문제를 방지했다.프로덕션에서 테스트한 결과, 3개의 병렬 처리를 사용할 때 업그레이드를 약 2시간 내에 완료할 수 있었다. 존 내부의 모든 브로커를 동시에 다시 시작하는 것은 기술적으로 가능했지만, 남아 있는 브로커에 대한 부하를 증가시키는 것을 방지하기 위해 피했다.다중 존 아키텍처와 커스텀 업데이트 논리는 업그레이드 시간을 7시간에서 약 2시간으로 줄였다. 이 개선은 업그레이드 시간을 단축하는 것 외에도 업그레이드 중 발생하는 노동과 스트레스를 줄였다.새로운 프로세스는 Kafka 클러스터에 대한 업그레이드를 빠르고 효율적으로 수행할 수 있도록 보장했으며 업그레이드 중 최소한의 영향을 주었다. 프로젝트의 성공은 업그레이드 기간의 단축 뿐 아니라 업그레이드 중 느끼는 편안함과 마음의 평화도 포함되었다.
2018년 에스티(Etsy)는 카프카(Kafka) 브로커를 구글 클라우드 플랫폼(Google Cloud Platform)의 쿠버네티스 엔진(Kubernetes Engine)으로 이전했습니다. 초기에는 단일 존에서 운영되었습니다. 그러나 나중에 팀은 존 내구성을 위해 아키텍처를 재설계하여 여러 존에 브로커를 분산하고 파티션 복제본을 균등하게 분배했습니다.무중단 마이그레이션을 달성하기 위해, 디스크를 스냅샷으로 만들고 올바른 존에 다시 생성하여 브로커를 이동했습니다. 파티션 재배치는 데이터 이동과 영향을 최소화하기 위해 스크립트와 도구를 사용하여 수동으로 처리했습니다.생산 환경에서 마이그레이션 후 테스트는 다중 존 설계의 효과를 입증했으며, 존 중단 시 최소한의 중단이 발생했습니다. 예상대로 존 간 네트워크 비용이 증가했지만, 자동 존 내구성의 이점이 비용을 상회했습니다.팀은 카프카의 팔로워 페칭 기능을 활용하여 비용을 최적화하고 추가적인 접근 방식을 탐색하여 존 간 트래픽을 줄이기 위해 노력하고 있습니다. 비용이 증가했지만, 존 내구성의 이점은 투자에 대한 정당성을 제공합니다.마이그레이션에는 디스크 및 파드 이동, 파티션 재배치 및 구성 조정이 포함된 복잡한 단계가 포함되었습니다. 팀의 신중한 계획과 실행으로 무중단 및 데이터 무결성을 보장했습니다.에스티의 경험은 중요한 서비스에 내구성을 설계하는 것의 중요성을 강조합니다. 존 내구성을 채택함으로써, 팀은 단일 존 실패와 관련된 위험을 완화하고 카프카 클러스터의 안정성과 가용성을 개선했습니다.다중 존 아키텍처는 에스티가 검색 인덱싱과 같은 중요한 사용자 중심 기능을 포함한 생산 트래픽 증가를 신뢰할 수 있게 합니다.회사의 비용 최적화 노력은 내구성과 재정적 고려 사이의 균형을 맞추는 데 대한 헌신을 보여줍니다.이 사례 연구는 다중 존 클라우드 환경에서 고가용성 카프카 클러스터를 마이그레이션하고 운영하는 데 관련된 도전과 전략에 대한 귀중한 통찰력을 제공합니다.