스트림 처리 인프라를 처음으로 구현하는 경우 독이 storm 1.0.1, kafka 0.9.0 및 Clojure 1.5입니다.Apache Kafka 및 Strom Clojure 구현
이제 메시징 시스템 (RabbitMQ)에 대한 배경 지식이 있고 몇 가지 이유로 좋아했습니다. 나는 소비자를 시작하고 메시지가 소비되지 않은 알고있는 경우
- 간단한. 즉 "정확히 한 번"
그러나 원하는 처리량을 얻을 수 없습니다.
지금은 크게 수동으로 오프셋 (offset)을 유지 (외부에서 내부 카프카 브로커에 Zookeper 이상)에 따라 카프카를 통과 한
나는 긴 마지막 카프카 브로커 인 소스와 Clojure의에 주둥이를 만들기 위해 관리하는 악몽이었다.
지금 documentation 상태
기본적으로 제공하고 있습니다 그래서 효과적으로 카프카 보장 한 번에-최소 사용자가 가장에 구현하는 나는 "정확히 한 번 메시징"입니다 욕망 대부분의 시나리오와 카프카에 따라 좋아 한 번의 배달은 생산자에 대한 재시도를 비활성화하고 메시지 묶음을 처리하기 전에 오프셋을 커밋합니다. 정확히 한번 배송하려면 대상 스토리지 시스템과의 협력이 필요하지만 Kafka는 이것을 실현하는 오프셋을 제공합니다.
clojure kafka 스파우트의 개념으로는 개념화하기가 어렵습니다.
나는 도중에 여러개의 boltz를 가지고 있을지도 모릅니다 만 끝점은 Postgres 클러스터입니다. 나는 데이터베이스에 오프셋을 저장하고 (레이스 위험이 발생하기를 기다리는 것처럼 들린다), 폭풍우 클러스터를 초기화 할 때 Postgres에서 오프셋을 가져 옵니까?
또한 카프카 스파우트에 대한 병렬 처리를 하나 이상의 숫자로 설정할 위험이 있습니까?
일반적으로 this을 시작점으로 사용합니다. 많은 예가 Clojure에서 사용할 수 없습니다. 사용하고있는 버전에 대한 몇 가지 사소한 개조가 있습니다. 이 수행 할 수있는 작업의 일부가 정확히에 근무 될 수 있도록하는 것은 불가능 분산 된 시스템을
(def ^{:private true
:doc "kafka spout config definition"}
spout-config (let [cfg (SpoutConfig. (ZkHosts. "127.0.0.1:2181") "test" "/broker" (.toString (UUID/randomUUID)))]
;;(set! (. cfg scheme) (StringScheme.)) depricated
(set! (. cfg scheme) (SchemeAsMultiScheme. (StringScheme.)))
;;(.forceStartOffsetTime cfg -2)
cfg))
(defn mk-topology []
(topology
{;;"1" (spout-spec sentence-spout)
"1" (spout-spec my-kafka-spout :p 1)
"2" (spout-spec (sentence-spout-parameterized
["the cat jumped over the door"
"greetings from a faraway land"])
:p 2)}
{"3" (bolt-spec {"1" :shuffle}
split-sentence
:p 5)
"4" (bolt-spec {"3" ["word"]}
word-count
:p 1)}))
이것은 통찰력있는 이야기입니다. –