Kafka는 생산자와 소비자 간에 데이터를 안정적으로 전달할 수 있는 분산 게시-구독 메시징 시스템입니다. 높은 처리량, 낮은 대기 시간 및 내결함성을 갖추고 있습니다.
Kafka는 다음 구성 요소로 구성됩니다.
생산자가 Kafka 클러스터에 데이터를 보내면 데이터가 하나 이상의 파티션에 기록됩니다. 각 파티션에는 데이터가 손실되지 않도록 여러 개의 복사본이 있습니다. 소비자는 모든 복제본에서 데이터를 읽을 수 있습니다.
Kafka는 "오프셋"이라는 메커니즘을 사용하여 소비자가 데이터를 읽는 위치를 추적합니다. 오프셋은 소비자가 파티션에서 읽은 데이터의 양을 나타내는 정수입니다. 소비자가 데이터를 읽으면 ZooKeeper에 오프셋을 저장합니다.
소비자가 실패하면 마지막으로 기록된 오프셋에서 다시 시작할 수 있습니다. 이를 통해 소비자는 데이터를 잃지 않습니다.
Kafka의 시스템 아키텍처는 여러 노드로 구성된 분산 시스템입니다. 각 노드는 서로 다른 시스템에서 실행될 수 있는 독립적인 프로세스입니다.
Kafka 노드는 TCP 프로토콜을 통해 통신합니다. 각 노드는 모든 주제와 파티션에 대한 메타데이터 정보가 포함된 메타데이터 복사본을 유지 관리합니다.
생산자가 Kafka 클러스터에 데이터를 보낼 때 먼저 메타데이터 노드에 요청을 보내 쓸 파티션에 대한 정보를 가져옵니다. 그런 다음 생산자는 데이터를 해당 파티션에 직접 씁니다.
소비자는 Kafka 클러스터에서 데이터를 읽을 때 먼저 메타데이터 노드에 요청을 보내 읽을 파티션에 대한 정보를 얻습니다. 그런 다음 소비자는 해당 파티션에서 직접 데이터를 읽습니다.
다음은 Kafka를 사용하는 간단한 예제 코드입니다.
// 创建一个生产者 Producer producer = new KafkaProducer(properties); // 创建一个主题 String topic = "my-topic"; // 创建一个消息 ProducerRecord<String, String> record = new ProducerRecord<>(topic, "hello, world"); // 发送消息 producer.send(record); // 创建一个消费者 Consumer consumer = new KafkaConsumer(properties); // 订阅主题 consumer.subscribe(Arrays.asList(topic)); // 轮询消息 while (true) { ConsumerRecords<String, String> records = consumer.poll(100); for (ConsumerRecord<String, String> record : records) { System.out.println(record.value()); } }
이 예제 코드는 Kafka를 사용하여 메시지를 보내고 받는 방법을 보여줍니다. 이 샘플 코드를 기초로 사용하여 고유한 Kafka 애플리케이션을 구축할 수 있습니다.
위 내용은 Kafka의 작동 원리 및 시스템 프레임워크 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!