tech
Kafka Connect DLQ, 소스 커넥터에는 적용되지 않는다
Dead Letter Queue는 싱크 커넥터 전용 기능이다. errors.tolerance=none 기본값에서는 DLQ 토픽을 지정해도 동작하지 않는다는 것을 ConnectorConfig 소스로 확인했다.
StreamsBuilder.build()에 Properties를 안 넘기면 최적화가 무시된다
topology.optimization을 설정만 하고 StreamsBuilder.build()를 인자 없이 호출하면 아무 효과가 없다. Kafka Streams 소스 Javadoc에 굵게 강조된 함정과 EOS 설정을 함께 정리했다.
멱등성 프로듀서가 못 막는 중복, 애플리케이션 레벨 재전송
enable.idempotence는 프로듀서 내부 재시도의 중복만 제거한다. 애플리케이션이 직접 재호출하는 재전송과 세션을 넘나드는 재시작은 별개 문제라는 것을 KafkaProducer 소스로 확인했다.
Kafka Tiered Storage, 압축 토픽에는 쓸 수 없는 이유
cleanup.policy=compact인 토픽은 원격 스토리지 대상이 될 수 없다. LogConfig 검증 로직으로 확인한 Tiered Storage 설계 제약과 log.local.retention.ms 기본값의 함정.
KRaft 컨트롤러 쿼럼, voters와 bootstrap.servers 헷갈리지 않기
ZooKeeper 없는 Kafka에서 controller.quorum.voters와 controller.quorum.bootstrap.servers는 서로 다른 부트스트랩 경로다. 트렁크 소스로 확인한 KRaft 설정 원칙.
RAG 성능은 청킹 전략에서 갈린다
임베딩 모델보다 문서를 어떻게 자르는지가 검색 품질을 더 많이 좌우했다.
Spring Batch 청크 사이즈, 무작정 키운다고 빨라지지 않는다
커밋 인터벌과 메모리, DB 락 경합을 함께 고려해야 하는 이유.
LLM API 비용, 캐싱만으로 60% 줄인 이야기
프롬프트 캐싱과 모델 라우팅으로 응답 품질을 유지하면서 비용을 줄인 경험.
Kafka Consumer Lag이 쌓일 때 Spring에서 확인한 것들
파티션 개수와 컨슈머 병렬도, 그리고 처리 로직 자체의 병목을 구분해서 봐야 한다.