Google Pub / Sub와 Kafka를 평가하고 있나요? [닫은]


82

나는 kafka에서 많이 작업하지는 않았지만 GCE에서 데이터 파이프 라인을 구축하고 싶었습니다. 그래서 우리는 Kafka 대 PUB / Sub를 알고 싶었습니다. 기본적으로 메시지 일관성, 메시지 가용성, 메시지 안정성이 Kafka와 Pub / sub 모두에서 어떻게 유지되는지 알고 싶습니다.

감사


답변:


92

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는 대기열을 제공함).


5
재생은 대부분의 이벤트 지향 아키텍처에서 중요한 기능입니다. 또한 Kafka는 메시지에 시퀀스 번호를 추가하므로 신뢰할 수있는 시퀀스 소스가됩니다.
Buzz Moschetti 2017-08-12

4
PubSub와 같은 메시지 대기열 시스템으로 "재생"을 수행하는 방법은 더 많은 구독에 대한 주제를 팬 아웃 (즉, 더 많은 메시지 사본 생성)하는 것이며, 각 소비자는 자신의 속도로 자신의 구독을 소비합니다. 필요할 때 재생을위한 구독을 가질 수 있다고 생각합니다. Kafka로 동일한 작업을 수행하려면 새로운 소비자를 생성하고 전면에서 소비를 시작합니다 (Kafka는 메시지의 복사본을 만들지 않기 때문에 각 소비자에게 자신의 "포인터"오프셋을 제공하여 무엇을 추적했는지 추적합니다. 이미 읽기)
gunit

2
Kinesis는 의미 상 Kafka와 유사한 관리 형 서비스로 생각할 수 있지만 "Kafka의 관리 형 버전"이라고 말하는 것은 정확하지 않습니다. 실제 "관리 형 Kafka"는 Confluent Cloud confluent.io/confluent-cloud
Emmett Butler를

6
Cloud Pub / Sub는 최근 이전에 확인 된 메시지 재생에 대한 지원을 추가했습니다. 빠른 시작 가이드블로그 게시물 이 기능을 사용하는 방법에 대해 설명합니다.
Kamal Aboul-Hosn

1
@EmmettButler가 맞습니다. Kinesis는 자체 제품입니다. Kafka에 의해 구동 되었더라도 완전히 다른 API를 도입합니다. Amazon은 AWS MSK 와 함께 관리 형 Kafka를 제공합니다 .
user0000001

14

나는 위의 답변을 읽었으며 몇 가지 세부 사항이 보류 중이라고 생각하기 때문에 보완하고 싶습니다.

완전 관리 형 시스템 두 시스템 모두 클라우드에서 완전 관리 형 버전을 가질 수 있습니다. 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 모두에서 사용할 수 있다는 것입니다.


2
오해의 소지가 있다고 생각합니다. Kafka 유선 프로토콜에서 자체 라이브러리를 작성하지 않으려는 경우 기존 클라이언트는 이미 오프셋 커밋을 처리하기위한 구성 가능한 메커니즘을 제공합니다. 또한 커밋 된 오프셋은 Zookeeper에 보관되지 않지만 브로커간에 복제되는 특수 주제 "__consumer_offsets"에 있습니다. 이것은 좋은 읽기입니다 : confluent.io/blog/…
Zoltan

실제로 오프셋을 수동으로 저장하는 것에 대한 귀하의 진술을 정말로 이해하지 못합니다. With Kafka you will need to manage the offsets of the messages by yourself, using an external storage, such as, Apache Zookeeper => Downvoting
Fares

12

Kafka와 Cloud Pub / Sub의 큰 차이점 중 하나는 Cloud Pub / Sub가 완전히 관리된다는 것입니다. 머신, 클러스터 설정, 매개 변수 미세 조정 등에 대해 걱정할 필요가 없습니다. 즉, 많은 DevOps 작업이 처리되며 특히 확장해야 할 때 중요합니다.


7
Kafka를 완전 관리 형 서비스로 제공하는 여러 공급 업체가 있기 때문에 실제로 차이가 없습니다. 차이점은 아마도 Google PubSub는 Google Cloud에서 서비스로만 사용할 수 있으므로 온 프레미스 버전이 없으며 AWS 또는 Azure와 같은 다른 클라우드 공급자에서 실행되는 관리 형 서비스가 없다는 것입니다.
한스 제스 퍼슨

2
'Google PubSub는 Googles Cloud의 서비스로만 사용할 수 있습니다.'라는 오류가 있습니다. 애플리케이션이 Google App Engine에 배포되는 것과 관련이 없습니다. 어떤 클라이언트에서든 GooglePub / Sub에 연결하고 게시 할 수 있습니다. '서비스 계정'을 통해 안전하게 연결합니다.
Jeryl Cook

12
@JerylCook 나는 그가 당신이 프렘에 구글의 술집 / 서브를 설치할 수 없습니다 의미한다고 생각
Sinaesthetic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.