Kafka : 소비자 API 대 Streams API


103

나는 최근에 Kafka를 배우기 시작했고 이러한 질문으로 끝났습니다.

  1. 소비자와 스트림의 차이점은 무엇입니까? 나에게 어떤 도구 / 애플리케이션이 Kafka의 메시지를 소비한다면 Kafka 세계의 소비자입니다.

  2. 이것이 Kafka에서 메시지를 소비하거나 생성하기 때문에 Stream은 어떻게 다른가요? 소비자 API를 사용하여 자체 소비자 애플리케이션을 작성하고 필요에 따라 처리하거나 소비자 애플리케이션에서 Spark로 보낼 수있는 이유는 무엇입니까?

나는 이것에 대해 Google을했지만 이것에 대한 좋은 답변을 얻지 못했습니다. 이 질문이 너무 사소한 경우 죄송합니다.

답변:


108

2018 년 4 월 9 일 업데이트 : 현재 Kafka 용 이벤트 스트리밍 데이터베이스 인 ksqlDB 를 사용 하여 Kafka에서 데이터를 처리 할 수도 있습니다 . ksqlDB는 Kafka의 Streams API를 기반으로 구축되었으며 "스트림"및 "테이블"에 대한 최고 수준의 지원도 제공됩니다.

소비자 API와 Streams API의 차이점은 무엇입니까?

Kafka의 Streams 라이브러리 ( https://kafka.apache.org/documentation/streams/ )는 Kafka 생산자 및 소비자 클라이언트 위에 구축됩니다. Kafka Streams는 일반 클라이언트보다 훨씬 더 강력하고 표현력이 뛰어납니다.

일반 소비자보다 Kafka Streams를 사용하여 실제 애플리케이션을 작성하는 것이 훨씬 간단하고 빠릅니다.

다음은 Kafka Streams API의 몇 가지 기능이며, 대부분은 소비자 클라이언트에서 지원하지 않습니다 (기본적으로 Kafka Streams를 다시 구현하여 누락 된 기능을 직접 구현해야 함).

  • Kafka 트랜잭션을 통해 정확히 한 번 처리 의미를 지원합니다 ( EOS가 의미하는 것 ).
  • 스트리밍 조인 , 집계창을 포함한 내결함성 상태 저장 (물론 상태 비 저장) 처리를 지원 합니다 . 즉, 애플리케이션의 처리 상태를 즉시 관리 할 수 ​​있습니다.
  • 이벤트 시간 처리 는 물론 처리 시간수집 시간을 기반으로 한 처리를 지원합니다 . 또한 비 순차 데이터를 원활하게 처리 합니다 .
  • 스트림 처리와 데이터베이스가 만나는 스트림과 테이블 모두에 대한 최고 수준의 지원을 제공 합니다. 실제로 대부분의 스트림 처리 애플리케이션에는 각각의 사용 사례를 구현하기 위해 스트림과 테이블이 모두 필요하므로 스트림 처리 기술에 두 가지 추상화 (예 : 테이블에 대한 지원 없음) 중 하나가없는 경우 문제가 발생하거나이 기능을 직접 구현해야합니다. (좋은 결과 내길 바랄 게...)
  • 대화 형 쿼리 ( '쿼리 가능 상태'라고도 함)를 지원 하여 다른 애플리케이션 및 서비스에 최신 처리 결과를 노출합니다.
  • 더 표현이다와 그 선박 (1) 함수형 프로그래밍 스타일의 DSL 과 같은 작업으로 map, filter, reduce뿐만 아니라 (2) 필수 스타일 프로세서 API 예 : 복합 이벤트 처리 (CEP)을 수행하기위한, (3) 당신도 결합 할 수 있습니다 DSL 및 프로세서 API.
  • 단위 및 통합 테스트를위한 자체 테스트 키트 가 있습니다.

Kafka Streams API에 대한 더 자세하지만 여전히 높은 수준의 소개는 http://docs.confluent.io/current/streams/introduction.html 을 참조 하십시오. 또한 하위 수준 Kafka 소비자와의 차이점을 이해하는 데 도움이됩니다. 고객.

Kafka Streams 외에도 이벤트 스트리밍 데이터베이스 ksqlDB 를 사용하여 Kafka에서 데이터를 처리 할 수 ​​있습니다. ksqlDB는 Kafka Streams 위에 구축됩니다. 기본적으로 Kafka Streams와 동일한 기능을 지원하지만 Java 또는 Scala 대신 스트리밍 SQL을 작성합니다. 프로그래밍 방식으로 CLI 또는 REST API를 통해 ksqlDB와 상호 작용할 수 있습니다. REST를 사용하지 않으려는 경우를 대비하여 네이티브 Java 클라이언트도 있습니다.

그렇다면 Kafka에서 메시지를 소비하거나 생성하기 때문에 Kafka Streams API는 어떻게 다릅니 까?

예, Kafka Streams API는 데이터를 읽고 Kafka에 데이터를 쓸 수 있습니다. Kafka 트랜잭션을 지원하므로 하나 이상의 주제에서 하나 이상의 메시지를 읽고 필요에 따라 처리 상태를 선택적으로 업데이트 한 다음 하나 이상의 출력 메시지를 하나 이상의 주제에 모두 하나로 작성할 수 있습니다. 원자 작동.

소비자 API를 사용하여 자체 소비자 애플리케이션을 작성하고 필요에 따라 처리하거나 소비자 애플리케이션에서 Spark로 보낼 수있는 이유는 무엇입니까?

예, 직접 소비자 애플리케이션을 작성할 수 있습니다. 앞서 언급했듯이 Kafka Streams API는 Kafka 소비자 클라이언트 (및 생산자 클라이언트 포함) 자체를 사용하지만 Streams API가 제공하는 모든 고유 기능을 수동으로 구현해야합니다. . "무료"로받을 수있는 모든 것은 위의 목록을 참조하십시오. 따라서 사용자가 더 강력한 Kafka Streams 라이브러리보다 일반 소비자 클라이언트를 선택하는 것은 드문 상황입니다.


8
어떤 경우에 애플리케이션이 Kafka Streams API를 통해 Kafka 소비자 API를 사용합니까?
bhh1988

4
주로 Kafka Consumer API의 하위 수준 메서드에 직접 액세스해야하는 상황에서 사용됩니다. 이제 Kafka Streams를 사용할 수있게되었으므로 일반적으로 사용자 지정, 특화된 애플리케이션 및 사용 사례에 대해 수행됩니다. 여기에 비유가 있습니다. Kafka Streams가 자동차라고 상상해보세요. 대부분의 사람들은 자동차를 운전하고 싶지만 자동차 정비사가되고 싶지는 않습니다. 그러나 어떤 사람들은 소비자 API를 직접 사용하고 싶을 때 어떤 이유로 든 자동차의 엔진을 열고 튜닝하기를 원할 수 있습니다. (밝혔다되는 것을 카프카 스트림은 사용자의 요구에 프로세서 API가 있습니다.)
마이클 G. NOLL

1
그들을 차별화하는 가장 중요한 것은 매장에 접근하는 능력이라고 생각합니다. 스트림 내에서 스토어 사용의 장점을 이해하면 카프카 스트림의 힘을 이해할 수 있습니다.
Yonatan Kiron

25

ETL 유형의 메시지 변환을 지원하도록 구축 된 Kafka Stream 구성 요소입니다. 주제에서 스트림을 입력하고 다른 주제로 변환 및 출력하는 것을 의미합니다. 실시간 처리를 지원하는 동시에 집계, 윈도우, 조인 등과 같은 고급 분석 기능을 지원합니다.

"Kafka Streams는 Kafka 생산자 및 소비자 라이브러리를 기반으로하고 Kafka의 기본 기능을 활용하여 데이터 병렬화, 분산 조정, 내결함성 및 운영 단순화를 제공함으로써 애플리케이션 개발을 단순화합니다."

다음은 Kafka Stream의 주요 아키텍처 기능입니다. 여기를 참조 하십시오

  1. 스트림 파티션 및 작업 : Kafka Streams는 파티션 및 작업의 개념을 Kafka 토픽 파티션을 기반으로하는 병렬 처리 모델의 논리 단위로 사용합니다.
  2. 스레딩 모델 : Kafka Streams를 사용하면 라이브러리가 애플리케이션 인스턴스 내에서 처리를 병렬화하는 데 사용할 수있는 스레드 수를 구성 할 수 있습니다.
  3. 로컬 상태 저장소 : Kafka Streams는 스트림 처리 응용 프로그램에서 데이터를 저장하고 쿼리하는 데 사용할 수있는 소위 상태 저장소를 제공합니다. 이는 상태 저장 작업을 구현할 때 중요한 기능입니다.
  4. 내결함성 : Kafka Streams는 Kafka에 기본적으로 통합 된 내결함성 기능을 기반으로합니다. Kafka 파티션은 가용성이 높고 복제되므로 스트림 데이터가 Kafka에 유지되면 애플리케이션이 실패하고 다시 처리해야하는 경우에도 사용할 수 있습니다.

아래의 내 이해를 바탕으로 요점을 누락하거나 오도하는 경우 업데이트 할 수있는 주요 차이점이 있습니다.

여기에 이미지 설명 입력 여기에 이미지 설명 입력

소비자 사용처-생산자 :

  1. 소비자가 단일 인 경우 메시지 프로세스를 사용하되 다른 주제로 넘치지 마십시오.
  2. 프로듀서 만 메시지를 생성하는 경우 포인트 1은 Kafka Stream이 필요하지 않습니다.
  3. 한 Kafka 클러스터의 소비자 메시지이지만 다른 Kafka 클러스터 토픽에 게시하는 경우. 이 경우 Kafka Stream을 사용할 수도 있지만 메시지를 다른 클러스터에 게시하려면 별도의 Producer를 사용해야합니다. 또는 단순히 Kafka 소비자-생산자 메커니즘을 사용하십시오.
  4. 일괄 처리-메시지를 수집하거나 일괄 처리의 종류를 수집해야하는 경우 일반적인 방법을 사용하는 것이 좋습니다.

Kafka Stream을 사용하는 곳 :

  1. 한 주제의 메시지를 사용하는 경우 Kafka Stream이 가장 적합합니다.
  2. 실시간 처리, 실시간 분석 및 기계 학습.
  3. 집계, 조인 창 등과 같은 상태 저장 변환
  4. Portworx 등과 같은 로컬 상태 저장소 또는 마운트 된 상태 저장소 사용 계획
  5. 정확히 하나의 처리 의미 및 자동 정의 내결함성을 달성합니다.

1
훌륭하고 정말 도움이되지만 한 가지 큰 실수가 있습니다. 정확히 한 번 소비자와 Streams API에서 의미 체계를 사용할 수 있습니다. 또한 EOS는 하위 수준에서 소비자 / 생산자를위한 설정 집합 일 뿐이므로이 설정은 특정 값과 함께 그룹화됩니다. EOS 동작을 보장합니다. 현재 저는 문제없이 소비자 API와 함께 EOS를 사용하고 있습니다.
uptoyou

네 맞습니다 속성을 설정하여 Kafka Stream에서 정확히 한 번 의미론을 정의 할 수 있지만 간단한 생산자와 소비자의 경우 단위 트랜잭션으로 지원할 멱등 및 트랜잭션을 정의해야합니다
sun007

제안에 따라 문구를 변경했습니다
sun007 19

@ sun007, 실시간 기능이 필요하지 않은 간단한 응용 프로그램의 경우 더 빠릅니다. 또한 스트리밍을 사용하면 kafka 기본 기능 위에 다른 고급 도구처럼 "추가"변환 오버 헤드가 추가됩니까?
Nag
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.