Apache Kafka는 스트리밍 데이터의 실시간 입력 및 처리를 위해 설계된 분산 데이터 저장소입니다. 스트리밍 데이터는 수천 개의 데이터 소스에서 지속적으로 생성되는 정보이며, 모두 동시에 데이터 레코드를 전송합니다. 스트리밍 플랫폼은 끊임없이 유입되는 데이터에 대처할 수 있어야 하며 이를 순차적이고 점진적으로 처리할 수 있어야 합니다.

멀티스레딩이란 무엇이며 왜 필요한가요?

운영 체제에서 지원하는 동시에 많은 실행 스레드를 제공하는 CPU(또는 멀티 코어 프로세서의 단일 코어) 기능을 멀티스레딩이라고 합니다. 멀티스레딩은 데이터 일관성을 손상시키지 않고 병렬로 작동할 수 있는 더 작은 단위로 작업을 나눌 수 있는 경우 애플리케이션 속도를 향상시키는 데 사용할 수 있습니다. Kafka를 사용하면 주제에서 정렬된 메시지 하위 집합인 파티션을 사용하여 분산 시스템을 확장할 수 있습니다.

최근에는 개발자가 계산이 단일 파티션의 데이터를 효율적으로 처리할 수 있도록 하는 대신 파티션/vms를 확장하여 필요한 처리량을 얻는 쉬운 경로를 선택하는 경향이 나타났습니다. 그것은 문제에 돈을 던지는 것과 같습니다.

Kafka 주제는 레코드를 파티션이라는 더 작은 부분으로 나눕니다. 파티션은 결과의 정확성을 손상시키지 않고 개별적으로 처리할 수 있어 병렬 처리의 토대를 마련합니다. 이것은 일반적으로 동일한 그룹 내에서 많은 소비자를 사용하는 것과 관련된 확장을 통해 수행되며, 각 소비자는 주제 파티션의 하위 집합에서 데이터를 처리하고 단일 스레드에서 작동합니다.

대부분의 경우 단일 스레드에서 메시지를 읽고 처리하는 것으로 충분하기 때문에 카프카 사용 사례아파치 카프카 소비자 스레딩 패러다임이 널리 사용됩니다. 처리에 I/O 활동이 필요하지 않을 때 폴 루프가 원활하게 작동합니다.

  AirPod를 재설정하는 방법?

카프카 소비자

Kafka를 구매하는 소비자는 일반적으로 그룹의 일부로 구매합니다. 많은 소비자가 주제를 구독하고 동일한 소비자 그룹의 구성원인 경우 각 소비자는 주제 파티션의 하위 집합에서 메시지를 받습니다.

소비자 그룹에 소비자를 추가하는 것은 Kafka 주제에서 데이터 소비를 확장하는 가장 일반적인 기술입니다. Kafka 소비자는 데이터베이스에 쓰기 또는 데이터에 대해 시간 소모적인 계산 수행과 같은 대기 시간이 긴 작업을 자주 수행합니다. 단일 소비자가 데이터가 주제로 흐르는 속도를 따라갈 수 없는 경우 각 소비자가 파티션 및 메시지의 하위 집합만 소유하도록 하여 부하를 공유하는 더 많은 소비자를 추가하여 확장합니다.

멀티스레딩의 이점

멀티스레딩을 사용하면 여러 프로그램을 동시에 실행할 수 있습니다. 스레드는 프로세스 내에서 사용할 수 있는 경량 프로세스입니다. 멀티스레딩을 사용하면 멀티태스킹을 통해 CPU를 최대한 활용할 수 있습니다.

다음은 다중 스레드 프로그래밍의 장점 중 일부입니다.

리소스 공유

메모리, 데이터 및 파일을 포함한 프로세스의 리소스는 모든 스레드에서 공유됩니다. 리소스 공유를 사용하면 단일 프로그램이 동일한 주소 공간에 여러 스레드를 가질 수 있습니다.

민감도

프로그램 응답성을 통해 프로그램의 일부가 멀티스레딩으로 인해 중단된 경우에도 프로그램이 계속 작동할 수 있습니다. 프로세스가 긴 작업을 수행하는 경우 이 작업도 수행할 수 있습니다.

다중 프로세서 아키텍처

다중 스레딩을 사용하면 다중 프로세서 아키텍처의 각 스레드가 다른 프로세서에서 병렬로 실행될 수 있습니다. 이것은 시스템의 동시성을 향상시킵니다. 단일 프로세서 시스템에서는 한 번에 하나의 프로세스 또는 스레드만 실행할 수 있습니다.

  Elon Musk, Twitter Spaces 이벤트에서 Diablo 4 플레이 인정 및 캐릭터 이름 공개

소비자 모델당 스레드란 무엇입니까?

각 스레드는 인스턴스화되고 소비자 모델별 스레드에서 Kafka 브로커에 연결됩니다. 메시지가 이러한 스레드로 전송될 파티션은 kafka 브로커에 의해 할당됩니다.

단일 스레드는 다중 스레드 소비자 모드에서 Kafka에 연결하고 여러/단일 파티션에서 데이터를 수집할 수 있습니다. 데이터가 스레드에 제공되면 스레드는 병렬 처리를 위해 다른 스레드 풀에 메시지를 배포할 수 있습니다. 이 방법에서 소비자 스레드는 어떤 자식 스레드가 어떤 유형의 메시지를 처리할지 결정합니다. 그러나 이러한 상황에서는 오프셋 관리가 매우 어려워집니다.

Spring은 Kafka에 연결하기 위해 여러 스레드를 쉽게 생성할 수 있습니다. 두 사람이 어떻게 다르게 행동하는지 봅시다. 10개의 파티션과 단일 동시 스프링 애플리케이션을 실행하는 단일 VM이 있는 단일 테스트 주제가 있습니다.

소비자 모델당 스레드


/**
* Consumer configuration for email topics
*
* @return
*/
@Bean
public ConsumerFactory<String, String> consumerFactory()
{
Map<String, Object> props = new HashMap<>();
Map<String, Object> props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
props.put(ConsumerConfig.GROUP_ID_CONFIG, EMAIL_STATUS_CONSUMER_GROUP);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,
StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,
StringDeserializer.class);
return new DefaultKafkaConsumerFactory<>(props);
}

/**
* kafka 수신기에 대한 동시성 설정
*
* @반품
*/
@콩
공개 ConcurrentKafkaListenerContainerFactory<문자열, 문자열> kafkaListenerContainerFactory()
{
ConcurrentKafkaListenerContainerFactory<문자열, 문자열> 팩토리 = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(소비자 공장());
factory.setConcurrency(1);
반환 공장;
}

Kafka 애플리케이션 활용 Kafka 소비자를 위한 멀티스레딩 사용 방법이 부문은 소비자 그룹 spring-group에서 듣고 있습니다. 다음은 단일 동시성이 작동하는 방식입니다.

그룹 주제 파티션 소비자 ID 호스트 클라이언트 ID

  Google 지도에서 철도 건널목 경고 표시 시작

스프링 그룹 테스트 주제 8 소비자-1-01a5779b-940b-44cf-b8c6-2e414aa38eb1 /172.22.0.1 소비자-1

spring-group test-topic 2 consumer-1-01a5779b-940b-44cf-b8c6-2e414aa38eb1 /172.22.0.1 consumer-1

스프링 그룹 테스트 주제 1 소비자-1-01a5779b-940b-44cf-b8c6-2e414aa38eb1 /172.22.0.1 소비자-1

spring-group test-topic 4 consumer-1-01a5779b-940b-44cf-b8c6-2e414aa38eb1 /172.22.0.1 consumer-1

스프링 그룹 테스트 주제 5 소비자-1-01a5779b-940b-44cf-b8c6-2e414aa38eb1 /172.22.0.1 소비자-1

spring-group test-topic 6 consumer-1-01a5779b-940b-44cf-b8c6-2e414aa38eb1 /172.22.0.1 consumer-1

스프링 그룹 테스트 주제 3 소비자-1-01a5779b-940b-44cf-b8c6-2e414aa38eb1 /172.22.0.1 소비자-1

스프링 그룹 테스트 주제 7 소비자-1-01a5779b-940b-44cf-b8c6-2e414aa38eb1 /172.22.0.1 소비자-1

spring-group test-topic 9 consumer-1-01a5779b-940b-44cf-b8c6-2e414aa38eb1 /172.22.0.1 consumer-1

spring-group test-topic 0 consumer-1-01a5779b-940b-44cf-b8c6-2e414aa38eb1 /172.22.0.1 consumer-1

위의 출력을 자세히 보면 애플리케이션의 소비자 ID가 10개 파티션 모두에 대해 동일하다는 것을 알 수 있습니다. 이는 파티션이 모두 연결되는 단일 스레드임을 나타냅니다.

동시성이 2로 증가하면 어떻게 되는지 살펴보겠습니다.

그룹 주제 파티션 소비자 ID 호스트 클라이언트 ID

spring-group test-topic 8 consumer-2-8ab0213d-683c-4f92-b3c8-767701905994 /172.22.0.1 consumer-2

스프링 그룹 테스트 주제 5 소비자-2-8ab0213d-683c-4f92-b3c8-767701905994 /172.22.0.1 소비자-2

spring-group test-topic 6 consumer-2-8ab0213d-683c-4f92-b3c8-767701905994 /172.22.0.1 consumer-2

spring-group test-topic 7 consumer-2-8ab0213d-683c-4f92-b3c8-767701905994 /172.22.0.1 consumer-2

spring-group test-topic 9 consumer-2-8ab0213d-683c-4f92-b3c8-767701905994 /172.22.0.1 consumer-2

스프링 그룹 테스트 주제 4 소비자-1-886f1a6e-f316-4e17-90d2-599a582682e4 /172.22.0.1 소비자-1

스프링 그룹 테스트 주제 2 소비자-1-886f1a6e-f316-4e17-90d2-599a582682e4 /172.22.0.1 소비자-1

스프링 그룹 테스트 주제 3 소비자-1-886f1a6e-f316-4e17-90d2-599a582682e4 /172.22.0.1 소비자-1

스프링 그룹 테스트 주제 1 소비자-1-886f1a6e-f316-4e17-90d2-599a582682e4 /172.22.0.1 소비자-1

spring-group test-topic 0 consumer-1-886f1a6e-f316-4e17-90d2-599a582682e4 /172.22.0.1 consumer-1

위의 스크린샷에서 볼 수 있듯이 이제 각각 5개의 파티션이 있는 2개의 스레드가 있습니다.

Kafka는 동일한 소비자 그룹에 속한 스레드 간에 파티션을 균등하게 분배하려고 시도합니다. 10개의 동시 스레드를 생성하면 각 파티션에 대한 전용 스레드가 생깁니다.

결론

이 기사에서 우리는 멀티스레딩에 대한 몇 가지 사항을 이해하고 스레딩 모델을 배웁니다.