Pulsar 세부 설명 2 - 아키텍처 및 구성 요소, 설치 및 구성(예: Go 언어)

Pulsar에 대한 자세한 설명 - 인덱스 디렉토리

1. Pulsar 아키텍처 및 구성 요소

1. 계층화된 아키텍처

Pulsar의 전체 아키텍처는 확장성, 신뢰성 및 유연성에 대한 큰 이점을 제공하는 계층형 설계를 채택합니다.

1.1 Pulsar의 전체 아키텍처

Pulsar의 전체 아키텍처는 다음을 포함한 몇 가지 주요 구성 요소로 구성됩니다.

  • 브로커: 브로커는 Pulsar의 핵심 구성 요소이며 메시지 수신, 저장 및 전달을 담당합니다. Pulsar 클러스터에는 확장성이 뛰어난 메시징 네트워크를 형성하기 위해 시스템 전체에 분산된 여러 브로커가 포함되어 있습니다.

  • ZooKeeper: Pulsar는 클러스터 조정 및 메타데이터 관리를 위해 ZooKeeper를 사용합니다. ZooKeeper는 Pulsar 클러스터의 구성 정보, 주제 정보 및 활성 브로커 목록을 유지 관리합니다.

  • BookKeeper: BookKeeper는 Pulsar의 저장 계층이며 메시지를 유지하는 데 사용됩니다. 메시지 내구성과 신뢰성을 보장하기 위해 신뢰성이 높은 분산 로그 저장소를 제공합니다.

  • Pulsar 프록시: Pulsar 프록시는 클라이언트가 프록시를 통해 Pulsar 클러스터에 액세스할 수 있도록 하는 선택적 구성 요소입니다. 로드 밸런싱, 보안, 프로토콜 변환 등의 기능을 제공합니다.

  • Pulsar Functions: Pulsar Functions는 메시지 처리 및 변환을 위한 서버리스 컴퓨팅 프레임워크입니다. 이를 통해 사용자는 간단한 방법으로 메시지 흐름을 처리하는 기능을 작성하고 배포할 수 있습니다.

1.2 계층형 아키텍처의 장점

  • 확장성: 계층화된 아키텍처를 통해 Pulsar는 브로커를 추가하여 쉽게 확장하고 메시지 처리 기능을 향상시킬 수 있습니다. 각 브로커는 특정 범위의 주제 파티션을 담당하여 수평 확장을 달성합니다.

  • 신뢰성: BookKeeper를 저장 계층으로 사용하면 메시지의 신뢰성과 내구성이 보장됩니다. 또한 계층형 설계를 통해 시스템이 일부 구성 요소의 오류에 더 효과적으로 대처할 수 있으므로 전반적인 가용성이 향상됩니다.

  • 유연성: 계층화된 설계를 통해 Pulsar는 다양한 시나리오와 요구 사항에 유연하게 적응할 수 있습니다. 예를 들어, 프록시 레이어를 추가하여 로드 밸런싱을 달성할 수 있고, 기능 컴퓨팅 레이어를 도입하여 메시지 처리 로직을 확장할 수 있습니다.

2, 장부관리자(BookKeeper) 및 주키퍼(ZooKeeper)

Pulsar의 아키텍처에는 BookKeeper와 ZooKeeper라는 두 가지 중요한 구성 요소가 포함됩니다. 이들은 각각 스토리지 계층과 조정 계층의 역할을 수행하여 Pulsar에 대한 신뢰성과 협업 관리 지원을 제공합니다.

2.1 장부관리자의 역할

  • 저장소 계층: BookKeeper는 Pulsar의 저장소 계층 구성 요소이며 메시지 지속을 담당합니다. 분산 로그 저장소를 사용하여 여러 Bookie 노드에 로그 형식으로 메시지를 저장합니다. 이러한 설계는 메시지 신뢰성과 내구성을 보장하여 노드 장애가 발생하더라도 메시지가 손실되지 않도록 보장합니다.

  • 분산 로그: BookKeeper는 분산 로그를 사용하여 메시지 쓰기 작업을 기록합니다. 이를 통해 여러 브로커가 메시지의 질서를 유지하면서 함께 작업할 수 있습니다. 각 주제에 대한 메시지는 여러 파티션으로 분할되어 BookKeeper에 저장됩니다.

2.2 ZooKeeper의 역할

  • 조정 레이어: ZooKeeper는 클러스터 조정 및 메타데이터 관리에 사용되는 Pulsar의 조정 레이어 구성 요소입니다. Pulsar 클러스터의 구성 정보, 주제 정보 및 활성 브로커 목록과 같은 주요 메타데이터는 ZooKeeper에 의해 관리되고 유지됩니다.

  • 오류 감지 및 복구: ZooKeeper는 Pulsar 클러스터의 노드 오류를 감지하고 해당 오류 복구를 수행하는 역할을 담당합니다. 브로커 노드에 장애가 발생하면 ZooKeeper는 다른 노드에 알리고 파티션 재배포를 지원하여 시스템의 고가용성을 보장합니다.

2.3 예

Go에서 BookKeeper 및 ZooKeeper와 상호 작용하는 예에는 일반적으로 해당 클라이언트 라이브러리를 사용하는 것이 포함됩니다.

예에서는 Go 언어를 사용하여 ZooKeeper 연결 및 BookKeeper 클라이언트를 생성하는 방법을 보여줍니다.

package main

import (
	"fmt"
	"github.com/samuel/go-zookeeper/zk"
	"github.com/apache/bookkeeper/bkclient-go/bkclient"
)

func main() {
    
    
	// 连接到ZooKeeper
	zkConn, _, err := zk.Connect([]string{
    
    "localhost:2181"}, 5000)
	if err != nil {
    
    
		fmt.Println("Error connecting to ZooKeeper:", err)
		return
	}

	defer zkConn.Close()

	// 创建BookKeeper客户端
	bkClient, err := bkclient.New(&bkclient.ClientConfig{
    
    
		ZkServers:    []string{
    
    "localhost:2181"},
		BkEnsemble:   3,
		BkWriteQuorum: 2,
		BkAckQuorum:   2,
	})
	if err != nil {
    
    
		fmt.Println("Error creating BookKeeper client:", err)
		return
	}

	defer bkClient.Close()

	// 可以使用ZooKeeper和BookKeeper客户端进行更多的操作,例如创建主题、发布消息等。
	fmt.Println("ZooKeeper and BookKeeper connection established successfully.")
}

3. 브로커 서비스

Pulsar의 아키텍처에서 Broker는 핵심 구성 요소 중 하나이며 메시지 수신, 저장 및 전달에 핵심적인 역할을 합니다.

3.1 브로커의 기능

  • 메시지 수신: 브로커는 생산자가 보낸 메시지를 수신하는 역할을 담당합니다. 생산자는 특정 주제(Topic)에 메시지를 보내고, 브로커는 이러한 메시지를 수신하고 처리하는 역할을 담당합니다.

  • 메시지 저장: 수신된 메시지는 브로커에 의해 로컬로 저장되거나 BookKeeper를 통해 지속됩니다. 이런 방식으로 브로커 노드에 장애가 발생하더라도 메시지를 유지할 수 있어 메시지의 신뢰성과 내구성이 보장됩니다.

  • 메시지 전달: 메시지가 저장되면 브로커는 관련 주제를 구독하는 소비자에게 메시지를 전달할 책임이 있습니다. 여기에는 메시지의 라우팅, 배포 및 전송이 포함됩니다.

  • 주제 및 파티션 관리: 브로커는 주제와 파티션의 생성, 삭제 및 연결을 관리합니다. 토픽은 여러 파티션으로 나눌 수 있으며, 각 파티션은 수평적 확장을 위해 서로 다른 브로커에 의해 관리됩니다.

  • 소비자 조정: 브로커는 소비자와 조정하여 메시지가 올바른 순서와 적절한 정책에 따라 소비자에게 전달되도록 합니다. 여기에는 로드 밸런싱, 오류 복구 등에 대한 작업이 포함됩니다.

3.2 브로커의 작업 흐름

  • 메시지 수신: 생산자가 Pulsar 클러스터에 메시지를 보내면 메시지가 먼저 브로커에 도달합니다. 각 브로커는 자체 관리 범위 내의 주제와 파티션에서 메시지를 수신하는 역할을 담당합니다.

  • 메시지 저장: 수신된 메시지는 로컬에 저장되며 BookKeeper를 통해 메시지를 유지하도록 선택할 수도 있습니다. 이렇게 하면 브로커 노드 오류가 발생해도 메시지를 계속 사용할 수 있습니다.

  • 메시지 전달: 메시지가 저장되면 브로커는 해당 주제의 구독자에게 메시지를 전달하는 역할을 담당합니다. 여기에는 해당 주제를 구독하는 소비자에게 메시지가 올바르게 전달되도록 메시지 라우팅이 포함될 수 있습니다.

  • 주제 및 파티션 관리: 브로커는 주제의 생성, 삭제 및 파티션 할당을 관리합니다. 시스템의 올바른 리소스 할당을 위해 주제 및 파티션의 메타데이터를 유지합니다.

  • 소비자 조정: 브로커는 소비자와 조정하여 메시지가 올바른 순서와 전략으로 소비자에게 전달되도록 합니다. 여기에는 소비자 참여, 종료, 로드 밸런싱 및 오류 복구 처리가 포함됩니다.

4. 펄서 IO(커넥터)

Pulsar IO는 커넥터라고도 알려진 Pulsar의 중요한 구성 요소로, Pulsar를 외부 시스템과 통합하여 데이터 입출력을 구현하는 유연한 방법을 제공합니다. 이를 통해 Pulsar는 다양한 데이터 소스 및 대상 시스템과 통합하여 더 광범위한 응용 시나리오를 지원할 수 있습니다.

4.1 Pulsar IO의 개념

  • 커넥터: Pulsar IO 커넥터는 Pulsar를 다른 데이터 저장 및 처리 시스템과 연결하는 데 사용되는 구성 요소입니다. 외부 시스템에서 Pulsar로 데이터를 가져오는 데 사용할 수 있으며, Pulsar에서 다른 시스템으로 데이터를 내보내는 데에도 사용할 수 있습니다.

  • 소스 커넥터: 소스 커넥터는 외부 시스템에서 데이터를 읽고 이를 Pulsar의 주제로 푸시하는 역할을 합니다. 이를 통해 추가 처리 및 배포를 위해 외부 시스템의 데이터를 Pulsar에 도입할 수 있습니다.

  • 싱크 커넥터: 싱크 커넥터는 Pulsar의 데이터를 외부 시스템으로 내보내는 역할을 합니다. Sink 커넥터를 통해 Pulsar의 메시지를 대상 시스템으로 전송하여 데이터 지속성, 분석 또는 기타 처리를 수행할 수 있습니다.

4.2 Pulsar IO의 사용 시나리오

  • 데이터 통합: Pulsar IO 커넥터를 사용하면 다양한 데이터 소스의 데이터를 Pulsar에 도입하여 서로 다른 시스템 간의 데이터 통합을 달성할 수 있습니다. 이는 데이터 레이크, 데이터 웨어하우스 또는 데이터 스트림 처리 플랫폼을 구축하는 데 유용합니다.

  • 이기종 시스템 통합: Pulsar IO 커넥터는 관계형 데이터베이스, NoSQL 데이터베이스, 메시지 대기열 등을 포함한 다양한 이기종 시스템과의 통합을 지원합니다. 이로 인해 Pulsar는 서로 다른 시스템 간에 데이터를 교환할 수 있는 범용 미들웨어가 되었습니다.

  • 실시간 데이터 처리: 소스 커넥터를 사용하면 실시간 데이터 소스를 Pulsar에 연결하고 Pulsar의 분산 메시징 메커니즘을 통해 효율적으로 처리할 수 있습니다. 싱크 커넥터는 처리 결과를 다른 시스템으로 출력하여 실시간 데이터 처리 프로세스를 구현할 수 있습니다.

4.3 예

Kafka 주제 "kafka-source-topic"이 있고 해당 메시지를 Pulsar의 "pulsar-destination-topic" 주제로 가져오려고 한다고 가정합니다.

示例:
Pulsar IO를 사용하는 Kafka 소스 커넥터:

  1. 준비:

    • Pulsar와 Kafka를 설치합니다.
    • Pulsar IO용 Kafka 소스 커넥터가 설치 및 구성되어 있는지 확인하십시오.
  2. Kafka 생산자를 만듭니다.

    package main
    
    import (
       "github.com/confluentinc/confluent-kafka-go/kafka"
       "fmt"
    )
    
    func main() {
          
          
       p, err := kafka.NewProducer(&kafka.ConfigMap{
          
          
          "bootstrap.servers": "localhost:9092",
       })
    
       if err != nil {
          
          
          fmt.Printf("Failed to create Kafka producer: %s\n", err)
          return
       }
    
       defer p.Close()
    
       // 生产者发送消息到 Kafka 主题
       err = p.Produce(&kafka.Message{
          
          
          TopicPartition: kafka.TopicPartition{
          
          Topic: &"kafka-source-topic", Partition: kafka.PartitionAny},
          Value:          []byte("Message from Kafka"),
       }, nil)
    
       if err != nil {
          
          
          fmt.Printf("Failed to produce message: %s\n", err)
       }
    
       // 等待消息发送完成
       p.Flush(5000)
    }
    

    위 코드는 Confluent Go 클라이언트를 사용하여 Kafka 생산자를 생성하고 "kafka-source-topic" 주제에 메시지를 보냅니다.

  3. Kafka 소스 커넥터를 구성하고 시작합니다.

    • 구성 파일 예시(kafka-source-config.yaml):

      tenant: public
      namespace: default
      name: kafka-source
      className: org.apache.pulsar.io.kafka.KafkaSource
      topic: pulsar-destination-topic
      kafkaTopic: kafka-source-topic
      bootstrapServers: localhost:9092
      
    • 커넥터를 시작합니다.

      bin/pulsar-admin source create --name kafka-source \
          --destination-topic-name pulsar-destination-topic \
          --source-type org.apache.pulsar.io.kafka.KafkaSource \
          --source-config-file kafka-source-config.yaml
      
  4. 관찰 결과:

    • Pulsar에서 소비자는 Kafka에서 가져온 메시지를 받기 위해 "pulsar-destination-topic" 주제를 구독합니다.
    // 创建 Pulsar 消费者
    consumer, _ := client.Subscribe(pulsar.ConsumerOptions{
          
          
       Topic:            "pulsar-destination-topic",
       SubscriptionName: "my-subscription",
    })
    
    defer consumer.Close()
    
    // 接收消息
    msg, _ := consumer.Receive(context.Background())
    fmt.Printf("Received message from Pulsar: %s\n", string(msg.Payload()))
    
    // 手动确认消息
    consumer.Ack(msg)
    

이 예에서는 Pulsar IO의 Kafka Source 커넥터를 사용하여 Kafka 주제의 메시지를 Pulsar로 가져오는 방법을 보여줍니다.

2. Pulsar 설치 및 구성

1. 설치 단계

다음 지침은 Windows, Linux 및 macOS에서의 Pulsar의 단일 노드 설치 및 클러스터 설치에 대한 것입니다.

1.1 단일 노드 설치

  1. Pulsar 다운로드:

    • Apache Pulsar 공식 웹사이트(https://pulsar.apache.org/download/)에서 최신 버전의 Pulsar 배포판을 다운로드하세요. 귀하의 운영 체제에 적합한 바이너리 배포판을 선택하고 다운로드하십시오.
  2. Pulsar 압축을 푼다:

    • 다운로드한 Pulsar 배포 파일을 원하는 디렉터리에 압축을 풉니다. Pulsar 파일이 포함된 폴더가 생성됩니다.
  3. Pulsar 구성:

    • Pulsar 압축 해제 디렉터리에 들어가서 conf해당 디렉터리를 찾아 standalone.conf파일을 편집합니다. 구성 파일에는 네트워크 포트, 저장 경로 등과 같은 Pulsar의 다양한 매개변수가 포함되어 있습니다. 최소한 구성 brokerServicePort및 이 필요합니다 webServicePort.
    # standalone.conf
    
    # Pulsar broker service port
    brokerServicePort=6650
    
    # Pulsar web service port
    webServicePort=8080
    
  4. Pulsar 시작:

    • 명령줄에 Pulsar 압축 해제 디렉터리를 입력하고 다음 명령을 실행하여 Pulsar Standalone을 시작합니다.

    • 창문:

      bin\pulsar standalone
      
    • 리눅스/맥:

      bin/pulsar standalone
      
  5. 설치 확인:

    • Pulsar에서 제공하는 명령줄 도구 또는 클라이언트 API를 사용하여 Pulsar 인스턴스에 연결하고 해당 인스턴스가 올바르게 실행되고 액세스 가능한지 확인하세요.

1.2 클러스터 설치

  1. 펄서 복사:

    • 단일 노드 설치에서 Pulsar 디렉터리를 모든 클러스터 노드로 복사합니다. 모든 노드의 Pulsar 버전이 일치하는지 확인하십시오.
  2. 클러스터를 구성합니다.

    • , 등을 broker.conf포함한 클러스터 관련 정보를 구성하려면 각 노드의 파일을 편집합니다 . 모든 노드가 유사하게 구성되었는지 확인하되 각 노드의 실제 IP 주소로 설정해야 합니다.advertisedAddressbrokerServicePortwebServicePortadvertisedAddress
    # broker.conf
    
    # Advertised address for the broker
    advertisedAddress=<Node_IP_Address>
    
    # Pulsar broker service port
    brokerServicePort=6650
    
    # Pulsar web service port
    webServicePort=8080
    
  3. 클러스터를 시작합니다.

    • 각 노드에서 다음 명령을 실행하여 Pulsar Broker를 시작합니다.

    • 창문:

      bin\pulsar broker
      
    • 리눅스/맥:

      bin/pulsar broker
      
  4. 클러스터 확인:

    • Pulsar에서 제공하는 명령줄 도구 또는 클라이언트 API를 사용하여 클러스터의 노드에 연결하고 노드가 실행 중이고 액세스 가능한지 확인하세요. 모든 노드의 IP 주소와 포트(기본값은 6650)를 사용하여 클러스터에 연결할 수 있습니다.

2. 구성 파일

2.1 구성 파일 구조

Pulsar의 구성 파일은 일반적으로 .conf키-값 쌍의 모음이며 Pulsar의 다양한 매개변수를 지정하는 데 사용되는 형식을 채택합니다.

다음은 구성 파일 구조의 예입니다.

# 注释以 '#' 开头
key1=value1
key2=value2
# ...

[Section1]
key3=value3
key4=value4
# ...

[Section2]
key5=value5
key6=value6
# ...
  • 주석에는 로 시작하는 주석 행이 #사용됩니다.
  • 키-값 쌍은 구성 항목의 값을 설정하는 데 사용됩니다.
  • 대괄호는 섹션이라고 하는 구성 항목 그룹을 정의하는 데 사용됩니다.

2.2 공통 구성 항목 분석

1. 브로커 구성( broker.conf)
  • advertisedAddress

    • Pulsar Broker 광고의 주소, 즉 클라이언트가 Broker에 연결하는 데 사용하는 주소를 설정하는 데 사용됩니다. IP 주소 또는 호스트 이름일 수 있습니다.
  • brokerServicePort

    • Pulsar Broker가 서비스를 제공하는 포트 번호를 설정하며, 클라이언트는 이 포트를 통해 Broker에 연결합니다.
  • webServicePort

    • 관리 및 모니터링 기능을 위한 웹 인터페이스를 제공하는 데 사용되는 Pulsar 웹 서비스의 포트 번호를 설정합니다.
  • zookeeperServers

    • ZooKeeper 서버의 주소를 지정합니다. Pulsar는 ZooKeeper를 사용하여 클러스터의 다양한 노드를 조정합니다.
2. 독립형 모드 구성 ( standalone.conf)
  • brokerServicePort

    • 위와 동일하게 Pulsar Standalone 모드에서 서비스를 제공하기 위한 포트 번호를 설정합니다.
  • webServicePort

    • 위와 동일하게 Pulsar Standalone 모드에서 웹 서비스의 포트 번호를 설정합니다.
3. 기타 공통 구성 항목
  • zookeeperServers

    • 클러스터에서는 Broker 구성에서 ZooKeeper 서버의 주소를 지정하는 데 사용될 수도 있습니다.
  • configurationStoreServers

    • Pulsar 구성 정보의 스토리지 서버 주소를 지정하는 데 사용됩니다. Pulsar는 이 정보를 사용하여 구성을 공유합니다.
  • managedLedgerDefaultEnsembleSize그리고 managedLedgerDefaultWriteQuorum:

    • 관리 원장에 대한 기본 복제본 수와 최소 쓰기 수를 구성합니다.
  • bookkeeperMetadataServiceUri

    • BookKeeper 메타데이터를 저장하는 데 사용되는 BookKeeper 메타데이터 서비스의 URI를 지정합니다.

2.3 보충 지침

  • 구성 파일 위치:

    • conf구성 파일은 일반적으로 Pulsar 설치 디렉터리의 하위 디렉터리 에 있습니다 .
  • 문서 참조:

    • 자세한 구성 항목 설명과 모범 사례 권장 사항이 포함된 공식 Apache Pulsar 설명서를 참조하는 것이 좋습니다.
  • 동적 구성:

    • 런타임 시 Broker를 다시 시작하지 않고도 Pulsar의 명령줄 도구나 API를 통해 구성을 동적으로 변경할 수도 있습니다.

Guess you like

Origin blog.csdn.net/weixin_49015143/article/details/135080666
Recommended