저는 [Kafka와 같은] Streaming Broker를 처음 접했고 [JMS, Rabbit MQ와 같은] 큐잉 메시징 시스템에서 왔습니다.
나는 Kafka 문서에서 메시지가 레코드로 오프셋 된 Kafka 파티션에 저장된다는 것을 읽었습니다. 그리고 소비자는 오프셋에서 읽습니다.
메시지와 레코드의 차이점은 무엇입니까 [여러 / 부분 메시지가 레코드를 구성합니까?]
소비자가 오프셋에서 읽을 때 소비자가 부분 메시지를 읽을 가능성이 있습니까? 소비자가 일부 논리를 기반으로 이러한 부분 메시지를 문자열로 묶을 필요가 있습니까?
또는
메시지 1 개 = 레코드 1 개 = 오프셋 1 개
"배치 크기"가 보커에 게시 할 메시지의 바이트 수를 결정하기 때문에 문제가 발생했습니다. message1 = 100bytes이고 message2 = 200 바이트이고 batchsize가 150bytes로 설정된 2 개의 메시지가 있다고 가정 해 보겠습니다. 이것은 message1에서 100 바이트와 message2에서 50 바이트가 한 번에 브로커로 전송된다는 것을 의미합니까? 그렇다면이 두 메시지는 오프셋에 어떻게 저장됩니까?
Kafka에서 Producer 는 Topics에 메시지 또는 레코드 (두 용어를 서로 바꿔서 사용할 수 있음)를 보냅니다 . 토픽은 일반적으로 3 개 이상의 브로커 로 구성된 Kafka 클러스터에 분산 된 하나 이상의 파티션 으로 나뉩니다 .
메시지 / 레코드는 리더 파티션 (단일 브로커 소유)으로 전송되고 Offset에 연결됩니다 . 오프셋은 토픽 / 파티션 내의 레코드를 고유하게 식별하는 데 사용되는 단조 증가하는 숫자 식별자입니다. 예를 들어 레코드 파티션에 저장된 첫 번째 메시지는 오프셋 0을 갖습니다.
오프셋은 주제 / 파티션에서 메시지의 위치와 소비자 그룹 의 위치를 모두 식별하는 데 사용됩니다 .
최적화를 위해 생산자는 파티션별로 메시지를 일괄 처리합니다. 배치는 구성 batch.sized
되거나 linger.ms
도달 하면 준비된 것으로 간주됩니다 . 예를 들어 batch.size
200KB 로 설정하고 두 개의 메시지 (150KB 및 100KB)를 보내는 경우 잠재적으로 동일한 일괄 처리의 일부가됩니다. 그러나 생산자는 단일 메시지를 덩어리로 분할하지 않습니다.
아니요, 소비자는 부분 메시지를 읽을 수 없습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다