Apache Kafka 대 Apache Storm


102

Apache Kafka : 분산 메시징 시스템
Apache Storm : 실시간 메시지 처리

이벤트 데이터를 처리하기 위해 실시간 데이터 파이프 라인에서 두 기술을 어떻게 사용할 수 있습니까?

실시간 데이터 파이프 라인 측면에서 두 가지 모두 동일한 작업을 수행하는 것 같습니다. 데이터 파이프 라인에서 두 기술을 어떻게 사용할 수 있습니까?

답변:


158

Apache Kafka를 대용량 데이터를 처리 할 수 ​​있고 한 끝점에서 다른 끝점으로 메시지를 전달할 수있는 강력한 분산 대기열로 사용합니다.

Storm은 대기열이 아닙니다. 실시간 처리 능력을 분산시킨 시스템으로 실시간 데이터에 대한 모든 종류의 조작을 병렬로 실행할 수 있습니다.

이러한 도구의 일반적인 흐름 (내가 아는대로)은 다음과 같습니다.

실시간 시스템-> Kafka-> Storm-> NoSql-> BI (선택 사항)

따라서 대용량 데이터를 처리하는 실시간 앱이 있으며이를 Kafka 대기열로 보냅니다. Storm은 kafka에서 데이터를 가져와 필요한 조작을 적용합니다. 이 시점에서 일반적으로이 데이터에서 몇 가지 이점을 얻고 싶으므로 추가 BI 계산을 위해 일부 Nosql db로 보내거나 다른 시스템에서이 NoSql을 쿼리 할 수 ​​있습니다.


감사합니다 Forhas. 이것은 매우 도움이됩니다. 한 가지 질문으로 Apache Kafka를 사용하여 Apache 로그 파일을 집계 할 수 있습니까? 아니면 Flume이 여전히 필요합니까?
Ananth Duari 2014

나는 그런 흐름에 익숙하지 않지만 당신은 할 수 있다고 생각합니다. 필요에 따라 Splunk를 확인할 수 있습니다 (추측 ..).
forhas

GrayLog를 사용하여 apache kafka에 연결하는 것이 좋습니다. GrayLog에는 이미 kakfa 입력 플러그인이 있습니다.
saeid rastak

36

Kafka와 Storm의 목적은 약간 다릅니다.

카프카 는 초당 많은 양의 메시지를 처리 ​​할 수있는 분산 메시지 브로커입니다. 발행-구독 패러다임을 사용하고 토픽과 파티션에 의존합니다. Kafka는 Zookeeper를 사용하여 브로커간에 상태를 공유하고 저장합니다. 따라서 Kafka는 기본적으로 한 시스템에서 다른 시스템으로 메시지를 전송하는 역할을합니다.

Storm 은 확장 가능하고 내결함성이있는 실시간 분석 시스템입니다 (실시간으로 Hadoop처럼 생각). 소스 (Spouts)에서 데이터를 사용하여 파이프 라인 (Bolts)으로 전달합니다. 토폴로지에서 결합 할 수 있습니다. 따라서 Storm은 기본적으로 계산 단위 (집계, 기계 학습)입니다.


그러나 함께 사용할 수 있습니다. 예를 들어 애플리케이션은 kafka를 사용하여 데이터를 다른 서버로 전송하고 폭풍을 사용하여 계산을 수행합니다.


32

나는 이것이 오래된 스레드라는 것을 알고 있으며 Apache Kafka와 Storm의 비교는 작성 당시 유효하고 정확했지만 Apache Kafka가 수년에 걸쳐 많이 발전했으며 버전 0.10 (2016 년 4 월) 이후 Kafka가 포함되어 있다는 점에 주목할 가치가 있습니다. Storm과 같은 추가 소프트웨어없이 스트림 처리 기능을 제공하는 Kafka Streams API. Kafka에는 데이터의 다양한 소스 및 싱크 (대상)에 연결하기위한 Connect API도 포함되어 있습니다.

공지 블로그-https: //www.confluent.io/blog/introducing-kafka-streams-stream-processing-made-simple/

현재 Apache 문서-https: //kafka.apache.org/documentation/streams/

0.11 Kafka에서는 스트림 처리 기능이 더욱 확장되어 Exactly Once Semantics and Transactions를 제공합니다.

https://www.confluent.io/blog/exactly-once-semantics-are-possible-heres-how-apache-kafka-does-it/


1
이제 기본적으로 실시간 시스템은 Kafkaas와 끝점을 직접 통신하고 Kafka는 예를 들어 DB에 저장합니까?
problemofficer

2
예, 이제 Kafka에는 데이터베이스 및 기타 데이터 소스 (syslog, JMS, 로그 파일 등)와 통신하는 Kafka Connect와 스트림 처리 (조인, 변환, 필터, 집계)를 수행하고 Kafka Connect로 돌아가 쓰기를 수행하는 Kafka Streams가 포함되어 있습니다. 다른 데이터베이스 또는 저장소로.
Hans Jespersen

15

이것이 작동하는 방법입니다

Kafka- 실시간 스트림 제공

Storm- 해당 스트림에서 일부 작업을 수행하려면

GitHub 프로젝트 https://github.com/abhishekgoel137/kafka-nodejs-d3js를 살펴볼 수 있습니다 .

(D3js는 그래프 표현 라이브러리입니다)

이상적인 사례 :

Realtime application -> Kafka -> Storm -> NoSQL -> d3js

이 저장소는 다음을 기반으로합니다.

Realtime application -> Kafka -> <plain Node.js> -> NoSQL -> d3js

1
Abhishek, 위 답변에서 언급 한 링크가 끊어졌습니다. 링크를 업데이트 해 주시겠습니까?
Abhijit Gaikwad

4

모두가 Apache Kafka :는 지속적인 메시징 대기열이라고 설명합니다.

Apache Storm : 연속 처리 도구입니다.

이 측면에서 Kafka는 API를 사용하여 FB, Twitter와 같은 웹 사이트에서 데이터를 가져오고 해당 데이터는 Apache Storm을 사용하여 처리되며 처리 된 데이터를 원하는 데이터베이스에 저장할 수 있습니다.

https://github.com/miguno/kafka-storm-starter

그냥 따라하면 몇 가지 아이디어를 얻을 수 있습니다


3

이벤트를 계속 처리하면서 패턴을 시각화하거나 경고 (트위터 트렌드를 생각)해야하는 사용 사례가있을 때 몇 가지 패턴이 있습니다.
NiFi를 사용하면 이벤트를 처리하고 사용자 지정 코딩이 거의없는 낮은 일괄 집계로 영구 데이터 저장소를 업데이트 할 수 있습니다.
Storm (많은 사용자 지정 코딩)을 사용하면 추세 이벤트에 거의 실시간으로 액세스 할 수 있습니다.
몇 초 동안 기다릴 수 있다면 kafka에서 hdfs (Parquet)로 일괄 처리하고 처리 할 수 ​​있습니다.
몇 초 만에 알 필요가 있다면 NiFi가 필요하며 아마도 Storm도 필요합니다. (토네이도 경고를 위해 작은 지역의 기상 조건을 확인해야하는 수천 개의 지구 관측소를 모니터링하는 것을 생각해보십시오.)


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.