Docker のログを columnify で Athena (Presto) に特化した Parquet にする
先日 columnify という、入力データを Parquet フォーマットに変換するツールがリリースされました。
cf. 軽量な Go 製カラムナフォーマット変換ツール columnify を作った話 - Repro Tech Blog
ruby-kafka の consumer group で instance type や availability zone によって特定の partition の lag が大きくなる問題を解消する gem を作った
ruby-kafka を使った consumer のアプリケーションにおいて、次のような前提があるとします。
Amazon SQS の ApproximateAgeOfOldestMessage とは何なのか?
SQS には ApproximateAgeOfOldestMessage という、queue に存在する最も古いメッセージの、queue に入ってからの経過時間に関するメトリクスがあります。例えば queue の処理が遅延していることを検知したい場合、ApproximateNumberOfMessagesVisible よりも良い指標となる場合があります。ただ、このメトリクスの定義の詳細についてはドキュメントに載っておらず、ドキュメントに書かれている内容も正確さを欠くので実験を通して現在の挙動についてまとめてみました。
Aurora MySQL 5.6 と ElastiCache Redis 5.0.6 における並列カウントアップのパフォーマンス比較
MySQL では次のような SQL を書くことで対象レコードの値をインクリメントすることができます。
Avro でスキーマ管理されたデータを BigQuery で取り込めるデータに変換する
Kafka に入っている Avro フォーマット(スキーマは Schema Registry で管理されている)のデータを BigQuery に取り込みたいとします。その場合、おそらく Google BigQuery Sink Connector を使うのが良いでしょう。
ところが、諸事情により Ruby で Kafka からデータを逐次取得し、BigQuery にデータを取り込みたいとします。その場合、fluentd のある環境であれば、取り出したデータを fluentd に送り、fluent-plugin-bigquery で取り込むのが手軽でしょう。
Presto における Service Discovery の動作原理
Presto を運用していると “No worker nodes available” というエラーに遭遇することがあります。これは coordinator が planning をする際に active な worker nodes が存在しないと起きるエラーなんですが、worker nodes に問題ではなく service discovery が上手く機能していなくて起きることがあります。
SRE Lounge #11 で「安定・安価なECS auto scalingを目指して」を発表しました
SRE Lounge #11 で Repro で行っている ECS の auto scaling について発表しました。ECS autoscaler で工夫している点についてがメインですが、一般的な auto scaling にも使える知見もあるかと思います。
Rails アプリケーションの不安定なテストを撲滅したい 〜system spec のデバッグ方法とテストを不安定にさせる要因〜
Rails アプリケーションの開発において、自分の変更に関係のないテストのせいで CI がコケるとストレスですよね?真っ先に直したくなりますよね?不安定なテストを直すのは大変な労力が要ると思ってませんか?実は、たいていのケースは簡単に再現確認ができるし、不安定になる要因もだいたい決まっているし、ログやスクリーンショットを見れば原因も簡単に特定できるんです!
Ruby の test-unit のプロファイルを取る
RSpec だと --format json
で実行すると各 example の実行時間が取得できるんですが、test-unit だとそのようなことができなさそうなのでプロファイルを取れるようにしてみました。
Cassandra でレプリケーションストラテジーを変更するとデータが消失する
Cassandra でレプリケーションストラテジーを変更するとデータが消失する現象に遭遇したんですが、どうしてそんなことが起きるのかやどうしたら直せるのかがさっぱりわからなかったので、ソースコードを読んだり手を動かしたりして調べてみました。
以下、Cassandra 3.11.4 の話です。
partitioner としてデフォルトの Murmur3Partitioner
を使用し、endpoint snitch として GossipingPropertyFileSnitch
を使用することとします。