나는 kafka에서 많이 작업하지는 않았지만 GCE에서 데이터 파이프 라인을 구축하고 싶었습니다. 그래서 우리는 Kafka 대 PUB / Sub를 알고 싶었습니다. 기본적으로 메시지 일관성, 메시지 가용성, 메시지 안정성이 Kafka와 Pub / sub 모두에서 어떻게 유지되는지 알고 싶습니다.
감사
나는 kafka에서 많이 작업하지는 않았지만 GCE에서 데이터 파이프 라인을 구축하고 싶었습니다. 그래서 우리는 Kafka 대 PUB / Sub를 알고 싶었습니다. 기본적으로 메시지 일관성, 메시지 가용성, 메시지 안정성이 Kafka와 Pub / sub 모두에서 어떻게 유지되는지 알고 싶습니다.
감사
답변:
Google에서 관리하는 Google Pub / Sub와 오픈 소스 인 Kafka 외에 다른 차이점은 Google Pub / Sub는 메시지 대기열 (예 : Rabbit MQ)이며 Kafka는 스트리밍 로그에 가깝다는 것입니다. Pubsub로 메시지를 "다시 읽거나" "재생"할 수 없습니다. (편집-2019 년 2 월 현재, 아래 댓글에 따라 메시지를 재생하고 특정 타임 스탬프까지 거꾸로 검색 할 수 있음)
Google Pub / Sub를 사용하면 구독에서 메시지를 읽고 ACK하면 사라집니다. 다른 독자가 읽을 수있는 메시지의 더 많은 사본을 가지려면 해당 주제에 대한 "구독"을 작성하여 주제를 "팬 아웃"하십시오. 여기서 각 구독은 주제와 관련된 모든 내용의 전체 사본을 갖게됩니다. 하지만 Google에서 읽은 데이터 양에 따라 Pub / Sub 사용량을 청구하기 때문에 비용도 증가합니다.
Kafka를 사용하면 보존 기간 (기본적으로 7 일)을 설정하면 메시지를 읽은 소비자 수에 관계없이 메시지가 Kafka에 유지됩니다. 새 소비자 (구독자라고도 함)를 추가하고 원할 때마다 주제의 전면에서 소비를 시작하도록 할 수 있습니다. 보존 기간을 무한으로 설정할 수도 있습니다. 그러면 기본적으로 Kafka를 변경 불가능한 데이터 저장소로 사용할 수 있습니다. http://stackoverflow.com/a/22597637/304262
Amazon AWS Kinesis는 Kafka의 관리 형 버전이고 Google Pubsub는 Rabbit MQ의 관리 형 버전이라고 생각합니다. SQS를 사용하는 Amazon SNS도 Google Pubsub와 유사합니다 (SNS는 팬 아웃을 제공하고 SQS는 대기열을 제공함).
나는 위의 답변을 읽었으며 몇 가지 세부 사항이 보류 중이라고 생각하기 때문에 보완하고 싶습니다.
완전 관리 형 시스템 두 시스템 모두 클라우드에서 완전 관리 형 버전을 가질 수 있습니다. Google은 Pubsub를 제공하며 클라우드 및 On-prem 에서 구성 할 수있는 완전 관리 형 Kafka 버전이 있습니다 .
Cloud vs On-prem Pubsub는 GCP 생태계의 일부로 만 제공되는 반면 Apache Kafka는 클라우드 서비스와 On-prem 서비스 모두로 사용할 수 있기 때문에 이것이 실제 차이라고 생각합니다 (클러스터 구성은 직접 수행).
메시지 복제 -Kafka를 사용하면 Apache Zookeeper와 같은 외부 저장소를 사용하여 메시지 오프셋을 직접 관리해야합니다. 그런 식으로 소비자가 지금까지 읽은 메시지를 추적 할 수 있습니다. Pubsub는 메시지 확인을 사용하여 작동합니다. 코드가 기한 전에 메시지를 확인하지 않으면 메시지가 다시 전송됩니다. 이렇게하면 메시지 중복을 피할 수 있습니다. 또 다른 방지 방법은 Cloud Dataflow PubsubIO를 사용하는 것입니다.
보존 정책 Kafka와 Pubsub 모두 최대 보존 시간을 구성하는 옵션이 있으며 기본적으로 7 일이라고 생각합니다.
소비자 그룹 대 구독 두 시스템에서 메시지를 읽는 방법에주의하십시오. Pubsub는 구독을 사용하고 구독을 만든 다음 해당 구독에서 메시지 읽기를 시작합니다. 메시지를 읽고 확인하면 해당 구독에 대한 메시지가 사라집니다. Kafka는 "소비자 그룹"과 "파티션"의 개념을 사용합니다. 모든 소비자 프로세스는 그룹에 속하며 특정 파티션에서 메시지를 읽을 때 동일한 "소비자 그룹"에 속하는 다른 소비자 프로세스는 사용할 수 없습니다. (오프셋이 결국 증가하기 때문입니다). 오프셋은 메시지를 읽어야하는 프로세스를 알려주는 포인터로 볼 수 있습니다.
귀하의 질문에 대한 정답이 없다고 생각합니다. 실제로 필요한 사항과 제약 사항에 따라 다릅니다 (아래는 시나리오의 몇 가지 예입니다).
솔루션이 GCP에 있어야하는 경우 분명히 Google Cloud Pubsub를 사용하세요. 모든 설정 노력을 피하거나 Kafka가 요구하는 완전 자동화 시스템에 대해 추가 비용을 지불합니다.
솔루션에 스트리밍 방식의 데이터 처리가 필요하지만 일괄 처리 (최종적으로)도 지원해야하는 경우 Cloud Dataflow + Pubsub를 사용하는 것이 좋습니다.
솔루션에서 일부 Spark 처리를 사용해야하는 경우 Spark Streaming (스트림 처리를 위해 Kafka를 구성 할 수 있음)을 탐색 할 수 있습니다.
일반적으로 둘 다 매우 견고한 스트림 처리 시스템입니다. 큰 차이를 만드는 점은 Pubsub가 GCP에 연결된 클라우드 서비스 인 반면 Apache Kafka는 Cloud와 On-prem 모두에서 사용할 수 있다는 것입니다.
With Kafka you will need to manage the offsets of the messages by yourself, using an external storage, such as, Apache Zookeeper
=> Downvoting
Kafka와 Cloud Pub / Sub의 큰 차이점 중 하나는 Cloud Pub / Sub가 완전히 관리된다는 것입니다. 머신, 클러스터 설정, 매개 변수 미세 조정 등에 대해 걱정할 필요가 없습니다. 즉, 많은 DevOps 작업이 처리되며 특히 확장해야 할 때 중요합니다.