왜 카프카 속도 너무 빨리? 대답하는 방법

카프카의 메시지는 일반적으로 그 것이다 주소 때문에 성능이 저하됩니다 디스크에 데이터를 읽고 쓸 생각됩니다, 저장 또는 디스크 캐시에 더 많은 시간이 소요 있지만, 사실은, 카프카의 특징 중 하나는 높은 처리량이다. 심지어 일반 서버, 카프카 쉽게 메시징 미들웨어의 대부분보다, 두 번째 레벨 당 쓰기 요청의 수백만 지원할 수있는이 기능은 카프카가 널리 장면으로 엄청난 양의 데이터를 처리하는 로그에 사용한다.

인터뷰 Q : 카프카 왜 속도가 너무 빨리?  대답하는 방법

벤치 마크에 대한 카프카, 아파치 카프카 벤치 마크를 참조 할 수 있습니다 : 초당 2 백만 쓰기 (세 저가의 컴퓨터에서)

쓰기와 읽기 모두의 분석에서 다음과 같은 데이터 이유 카프카 너무 빨리

첫째, 데이터를 기록

카프카는 데이터가 손실되지 않습니다, 하드 디스크에 기록 된 메시지가 나타납니다. 쓰기 속도를 최적화하기 위해 카프카는 두 가지 기술, 순차 쓰기 및 MMFile를 사용합니다.

순차 쓰기

디스크 읽기 및 쓰기 속도 당신이 그것을 사용하는 방법에 따라 달라집니다, 즉 순차 읽기이며, 작성하거나 임의 읽기 및 쓰기. 일련의 경우에 읽고, 연속 읽기 쓰기 속도와 메모리 디스크 변하지 물품.

주소가 "기계적 작용"이 소모 대부분의 시간 인 것을 특징> 쓰기 - 하드 디스크가 기계 구조이기 때문에, 각각의 읽기 및 쓰기 주소입니다. 그래서 하드 디스크는 대부분의 순차적 I / O를 같은 O / 랜덤 I 싫어 읽고 하드 디스크의 쓰기 속도를 개선하기 위해, 카프카는 순차적 I / O를 사용하는 것입니다

디스크 리눅스 및 최적화 읽고, 디스크 캐시를 미리 읽기 및 쓰기 숨김 포함, 더 될 것입니다 물품. 시간이 메모리에 이러한 작업을 할 경우, 큰 메모리 오버 헤드 자바 객체는, 다른 하나는, GC의 자바가 디스크 작업을 사용하여, 매우 오랜 시간이 될 데이터의 증가에 힙 메모리입니다 다음과 같은 이점이 있습니다 :

  1. 순차 읽기 및 쓰기 디스크 쓰기 순서 랜덤 액세스 메모리 이상
  2. 낮은 쓰기 JVM 주문 GC 효율, 대용량 메모리 풋 프린트. 이 문제를 방지 디스크를 사용하여
  3. 콜드 스타트 ​​순서가 기록되면, 디스크 캐시는 계속 사용할 수 있습니다

다음 그림은 카프카 카프카 문서 파일 (가상 프레임 부)의 단부에 삽입 될 메시지 데이터를 수신 한 후 실제로 각 파티션에 데이터를 기록하는 방법을 도시한다 :

이 방법은 단점이 있습니다 - 데이터를 삭제하는 방법은 없습니다, 카프카의 데이터는 삭제되지 않습니다를, 그것은 모든 데이터가 유지되며, 각 주제에 대한 각 소비자 (소비자가)를 표시하는 데 사용됩니다 상쇄했다 처음 몇 데이터를 읽습니다. 두 소비자가 :

  1. Consumer1 기록 시퀀스는 두 (주제 파티션 각 가정) partition0을, 대응 개의 파티션 오프셋 갖는다
  2. 시퀀스 Consumer2 Partition2에 대응하는 오프셋 필기구. 정상적인 상황에서 SDK는 내부 사육사 저장됩니다, 그래서 주소 사육사 소비자를 제공 할 필요가있다, 이것은 클라이언트 SDK를 유지할 책임이 오프셋, 카프카의 Broker는 완전히이 일을 무시합니다.

제거하지 않으면 Kakfa 데이터를 삭제하는 두 가지 전략을 제공하므로 하드 디스크는 확실히 전체 될 것입니다 :

  1. 하나는 시간에 따라 순차적으로 기록됩니다.
  2. 두 번째는 순차 쓰기 파일 파티션 크기를 기반으로합니다.

메모리 매핑 된 파일

순서가 하드 디스크 액세스 속도에 기록하더라도 메모리를 잡으려고 여전히 불가능하다. 그래서 카프카는 데이터가 디스크에 기록되는 실시간 아니라, 메모리 I / O 효율의 사용을 증가시키기 위해 최신 운영 체제 페이징 메모리의 모든 이점을 활용하고 있습니다.

메모리 매핑 된 파일도 메모리 매핑 된 파일로 변환됩니다 (나중에 mmap를라고도 함), 64 비트 운영 체제는 일반적으로 데이터 파일 20G를 나타낼 수 있습니다, 그 작동 원리는 물리적 메모리에 파일을 직접 매핑을 달성 운영 체제 페이지의 직접 사용은 .

당신은 실제 메모리의 매핑 작업이 하드 드라이브에 동기화됩니다 완료하면 (적절한 경우 운영 체제).

mmap에 의해 읽기와 읽기 - 쓰기 메모리로 하드 쓰기의 과정은 (물론, 가상 머신 메모리), 우리는 모든 세부 사항을 공개하는 가상 메모리의 메모리 크기에 대해 걱정할 필요가 없습니다.

사용자 공간의 오버 헤드를 제거하면 I / O 업그레이드를 많이 얻을 수있는이 방법은 커널 메모리 공간에 첫 번째 파일을 호출 데이터를 읽을 (복사 할 공간을 커널, 다음 사용자 메모리 공간에 복사합니다 .에서)하지만 분명한 결함도있다 - 프로그램이 자동으로 만 호출 데이터를 플러시 할 때 mmap를 작성 신뢰할 수없는 데이터가 정말 하드 디스크에 기록되지는 운영 체제가 실제 하드 씁니다.

카프카 카프카 생산자라는 동기화 (싱크)에 반환하기 전에 mmap를 즉시 다량 후에 기록하는 경우 제어하는 ​​파라미터는, 활성 --producer.type 플러시 아니다 제공 (플러시를 호출하지 않는 mmap를 생산자 비동기 호출을 기록 직후에 반환 비동기).

둘째, 데이터 읽기

디스크를 읽을 때 카프카는 어떤 최적화를 했습니까?

제로 복사를 달성 sendfile을 바탕으로

다음과 같이 파일이 전송 될 필요가 전통적인 모드는 특정 프로세스 세부 사항은 다음과 같습니다 :

  1. sendfile을 파일 데이터를 읽을 제로 복사 함수 호출을 달성 기반으로하는 커널 버퍼를 복사하는 것입니다
  2. 함수가 반환을 읽어 파일은 사용자 버퍼를 커널 버퍼에서 데이터를 복사
  3. 함수 호출을 쓰기, 파일이 소켓과 관련된 커널 버퍼에 사용자 버퍼의 데이터를 복사합니다.
  4. 관련 프로토콜 엔진에 소켓 버퍼에서 데이터를 복사합니다.

자세한 내용은 네트워크 파일 전송에 대한 읽기 / 쓰기 모드의 전통적인 방법입니다, 우리는이 과정에서 것을 볼 수 있으며, 데이터 파일은 4 개 개의 동작을 통해 사본은 실제로 :

  • 하드 드라이브 -> 커널 buf-> 사용자 buf-> 소켓 버퍼 관련 -> 프로토콜 엔진

에 sendfile 시스템 호출은 파일 전송 방법의 성능을 향상, 위의 반복 복사 줄이는 방법을 제공한다.

버전 2.1 커널은 sendfile을 시스템 호출은 네트워크와 두 로컬 파일 사이의 데이터 전송을 단순화하기 위해 도입된다. sendfile을 또한 컨텍스트 스위칭을 줄뿐만 아니라, 데이터의 복제를 감소 도입. sendfile을 (소켓, 파일, 렌);

다음과 같이 실행 프로세스는 다음과 같습니다

  1. sendfile을 시스템 호출, 파일 데이터는 커널 버퍼를 복사하는 것입니다
  2. 그리고 커널 버퍼 사본에서 커널 소켓 버퍼 관련
  3. 마지막으로 기존의 읽기 / 쓰기 모드에 비해 관련 프로토콜 엔진에 버퍼 복사 소켓, 커널 sendfile을 커널 버퍼의 2.1 버전의 도입은 사용자 버퍼로 감소 된 후, 사용자에 의해 버퍼가 소켓 버퍼에 관련된 파일을 복사하려면, 커널 버전 2.4 이후, 파일 디스크립터 결과 sendfile을 다시 복사 작업을 줄이고,보다 간단한 방법을 달성하기 위해 변경된다.

그래서 아파치, Nginx에, lighttpd를 웹 서버와 중,하는 sendfile을 관련 구성이 sendfile을 크게 파일 전송 성능을 향상시킬 수 있습니다 사용합니다.

소비자가 읽기 - 쓰기 모드 mmap에있는 파일로, 소비자에게 직접 카프카 파일을 데이터를 전송할 필요가있을 때 카프카 모든 메시지가하는 파일에 저장되어 직접 sendfile을 전달할 수 있습니다.

일괄 압축

대부분의 경우, 병목 현상이 CPU 나 디스크하지만, 네트워크 IO, 데이터 센터 WAN 데이터 라인간에 메시지를 보낼 특히 필요 없습니다. 데이터 압축은 CPU 자원의 작은 금액을 소비하지만, 카프카를 들어, 네트워크 IO가 고려되어야한다.

  1. 각 메시지가 압축하지만 카프카 배치 압축을 사용하므로 압축률이 상대적으로 낮은 경우, 압축은 단일 메시지 압축보다는 함께 여러 메시지 오는
  2. 카프카 소비자가 해결 될 때까지 압축되고, 메시지 세트 재귀 메시지 볼륨이 로그에 의해 압축 된 형태로 전송 될 수 있으며, 압축 된 포맷으로 유지 될 수 있도록
  3. 카프카는 Gzip 압축 프로토콜과 뭐 이따위 등 다양한 압축 프로토콜을 지원합니다

셋째, 요약

그것은 모든 배치 파일에 메시지 및 합리적인 대량의 압축 적 mmap을 개선하여, 네트워크 IO 손실을 줄일 수 있다는 카프카 속도의 비밀 I / O 속도, 쓰기 데이터 인해 하나의 partion을에 마지막에 추가 될 때 따라서, 최적의 속도, 직접 출사 된 sendfile 폭력 데이터를 판독.

 

HTTP : //bigdata.51cto.com/art/201910/604512.htm에서 재판

추천

출처www.cnblogs.com/xibuhaohao/p/11719749.html