google cloud pubsubを試した。
publisherとして、10万件連番のデータを送った。結果、22件程度抜けが発生した。どこにバグが有るのかよくわからない。十分テストする必要がありそうだ。
追記
pub/subへのpublishをflunetdのfluent-plugin-gcloud-pubsub-customに任せた所、50万件送信中、一件の抜けもなくなった。
一旦pub/subに取り込まれたものが抜けることとは無いが、自前で、publishするときにはretryを含めた処理が必要なのだろう。
サンプルコード
pub.py,sub.py,common.py,.envを落としてきて同じ場所に置く。
.envは環境に応じて書き換える。
TOPIC='[TOPIC_NAME]' <-生成したトピック名
GOOGLE_CLOUD_PROJECT='[PROJECT_ID]' <- プロジェクトID
SUBSCRIBE='[SUBSCRIBER_NAME]' <- トピックから作ったサブスクライバー
MONGO_DB='MONGO_DB_NAME' <- mongoにデータを貯めるので、mongoを入れる
JSON_KEY='PATH_TO_JSON_KEY' <- サービスアカウントのjsonキー(pubsubへの権限を与えておく)
テスト方法
pub.pyでデータをpublishする。
sub.pyでそのtopicからデータを取得しmongoに入れる。
check.pyでcountが連番であるか調査する。
./pub.py --part 10 --size 5000
partはcountを複数回するのでそれを識別するためのもの。sizeは送信するメッセージの個数
./sub.py
でデータを取ってくる。
./check.py --part 10
check.pyでcountが連番になっており欠けが無いか調査する。
テスト結果
次の番号が、一つ前の数値から1以上離れていた(つまり欠けが発生している)。
INFO:root:part=10 size=89989
INFO:root:13652
INFO:root:28995
INFO:root:29891
INFO:root:31986
INFO:root:33931
INFO:root:36939
INFO:root:37590
INFO:root:41001
INFO:root:46992
INFO:root:50001
INFO:root:52974
INFO:root:61001
INFO:root:66001
INFO:root:70966
INFO:root:84001
INFO:root:86001
INFO:root:88001
INFO:root:90990
INFO:root:94001
INFO:root:97001
INFO:root:99001