потерянные без исключения кортежи-штормы - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть настройка топологии шторма (1 рабочий), в которой spout (в java) удаляет (используя blpop) события из redis и передает в болты. но одно наблюдение - это некоторые события, которые не были получены (в clojure, потоках с 6 носиками, потоках с 50 болтами), когда очередь превышает 2 миллиона, и в журналах штормовых нимбов / супервизоров / зоопарков / рабочих не обнаружено предупреждений / исключений.

Локально этот сценарий не реплицируется с фиктивными данными. В кластере не наблюдается сетевой задержки / потери пакетов. средняя задержка обработки составляет 100 мс. Как найти причину, чтобы исправить это на производстве.

(ns event-processor
  (:import [backtype.storm StormSubmitter LocalCluster]
           java.util.UUID
           storm_jedis.RedisQueueSpout
           )
  (:use [backtype.storm clojure config])
  (:require [clojure.tools.logging :as log])
  (:require [clj-redis.client :as redis])
  (:import (redis.clients.jedis Jedis JedisPool JedisPoolConfig))
  (:gen-class))

(defmacro process-event [tuple]
    (log/info "processing event")
    )

(defbolt execute-ls-closure ["word"] {:prepare true}
  [conf context collector]
  (let [counts (atom {})]

    (bolt
     (execute [tuple]
       (let [
        timestart (. System currentTimeMillis)
        tuple-message (.get (get tuple "message") 0)
        string-to-emit (process-event tuple)
        ]
        (emit-bolt! collector [string-to-emit] :anchor tuple)
        (ack! collector tuple)
        )))))

(defn mk-topology []

  (topology
   ;{"1" (spout-spec sentence-spout)
   {"1" (spout-spec redis-spout :p 6)
                     }
   {"3" (bolt-spec {"1" :shuffle }
                   execute-ls-closure
                   :p 50)
                   }))

(defn run-local! []
  (let [cluster (LocalCluster.)]
    (.submitTopology cluster "word-count" {TOPOLOGY-DEBUG true} (mk-topology))
    (Thread/sleep 10000)
    (.shutdown cluster)
    ))

(defn submit-topology! [name]
  (StormSubmitter/submitTopology
   name
   {TOPOLOGY-DEBUG true
    TOPOLOGY-WORKERS 1}
   (mk-topology)))

(defn -main
  ([]
   (run-local!))
  ([name]
   (submit-topology! name)))

1 Ответ

0 голосов
/ 09 сентября 2018

Если это не сильно замедляет вашу топологию, вы можете включить ведение журнала отладки с помощью Config.setDebug(true) https://github.com/apache/storm/blob/f2ced23fa4e3f699558663baef4ee582ee148fa2/storm-client/src/jvm/org/apache/storm/Config.java#L1763.

В противном случае, я бы попытался добавить в ваши болты отладочную запись в журнал и включить ведение журнала для вашего излива Redis, чтобы выяснить, не теряются ли кортежи из-за Storm или интеграции Redis.

Также отмечу, что вы используете старую версию Storm. Вы можете попробовать обновить.

...