Kafka/Broker

Broker 내부 구조

재심 2023. 4. 16. 10:34

  • Socker Receive Buffer: 네트워크 스레드로 가기전 머무는 버퍼. OS수준에서 제공
  • Network Thread: 네트워크 관련 처리를 하는 스레드
  • Request Queue: 네트워크 스레드의 요청이 저장되며 기본적으로 500개의 메시지가 저장된다
  • I/O Thread: 실제 메시지 처리 스레드. 실제 디스크에 쓰는것이 아니고 Page Cache에 쓴다.
  • Purgatory Area: Page Cache에 쓴 후 잠시 대기하는 곳. 복제가 될 때 까지 대기한다.
  • Response Queue: 처리가 된 메시지들이 머무는 곳. 네트워크 스레드를 거져 Socker Send Buffer로 결과값을 돌려주게 된다.

성능개선 포인트

  • Socker Buffer Size: 배치 사이즈를 고려하여 튜닝
  • Thread Count
  • JVM Heap Size: 브로커는 JVM 상에서 동작한다. heap size에 영향을 받는 곳은 Network Thread, Request Queue, I/O Thread, Purgatory Area. 브로커는 메모리를 사용하지 않아서 최대 6GB정도로만 권장하고 있다고 한다.
  • Page Cache: 실제로는 Page Cache를 많이 사용하고 있어서 heap size는 적당히 할당하고 나머지 메모리는 Page Cache로 활용할 수 있도록 세팅

ex) Page cache가 32GB이고, 초당 write가 100MB라고 가정.

=> 100 * 320 = 32000. 320초 동안 producer한 메시지가 page cache에 존재할 수 있고, 디스크에 가기전에 Client에서 접근하면 좀 더 빠른 성능을 보장할 수 있다고 한다.

 

 

참조

브로커의 토픽 수 제한은 있으나 파티션 수의 제한은 없다고 한다.