TIL: 2017.11.24.

Development / TIL / Apache Kafka

  • Kafka 운용 도중, AWS EBS Disk Throughput 최대치에 부딪혀 병목이 발생하는 케이스(가령, 새로운 클러스터를 추가한다거나, 하나의 클러스터가 장애가 발생해서 내려갔다가 다시 올라와서 일반적인 Producing 양을 초과했을 때)를 해결하기 위해 EBS 볼륨 크기를 늘려 해결하는 방법1이 있는데(왜냐하면 디스크 볼륨 크기별로 IOPS나 Throughput이 제한됨), 웃긴게 아무리 EBS 볼륨 크기를 올린다 해도 결국 인스턴스 사이즈에 따라 그 Throughput이 제한된다는 것이다.2 쩝. 몇 년 째 AWS에서 시스템 운용하면서 이걸 여태 왜 몰랐는지 모르겠다.
  • 더불어 인스턴스 사이즈에서 제한이 걸리지 않는다면, 단순 볼륨 크기를 늘리는 것 외에도 RAID0를 구성하는 방법3이 존재하긴 한다.
  • 근본적으로 데이터 사이즈를 줄이면 되지 않을까? 싶어서 찾아보니 Kafka Producer에서 Gzip, Snappy, LZ4로 압축이 가능하다는 사실을 알았다.4
  • 제약조건으로는, Kafka Cluster에서 Decompress하는데 CPU를 또 너무 많이 사용하면 안되니까 Compression ratio와 CPU 사용량 사이의 적절한 조합을 가진 압축 알고리즘을 찾는게 중요하다.
  • 각각의 압축 알고리즘에 대한 성능 벤치마크들
  • 사용하고자 하는 Kafka client library들 중, Kafka Python Client(Python용, Apache 2.0 License)와 Sarama(Go 용, MIT License)는 Producer에서 Compression Codec을 지원하는데, lua-resty-kafka(LuaJIT on NGINX용, 3-Clause BSD Licnese)에서는 Codec이 없는 것이 일단은 문제다!

Share on : Twitter, Facebook or Google+