Show HN: DuckDB for Kafka Stream Processing

2025/12/09 2:25

Show HN: DuckDB for Kafka Stream Processing

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

SQLFlowは、通常のSQLクエリをリアルタイム分析パイプラインに変換するDockerベースのストリームプロセッサです。ローカルで実行するには:

  1. 前提条件 – Dockerをインストールし、
    https://github.com/turbolytics/sql-flow
    をクローンして
    pip install -r requirements.txt
    を実行します。
  2. イメージ – 最新のイメージを
    docker pull turbolytics/sql-flow:latest
    で取得します。
  3. Kafka – Docker Compose(
    docker-compose -f dev/kafka-single.yml up -d
    )を使ってシングルノードKafkaインスタンスを起動します。
  4. テスト設定 – 設定ファイルを確認します:
    docker run -v $(pwd)/dev:/tmp/conf \
               -v /tmp/sqlflow:/tmp/sqlflow \
               turbolytics/sql-flow:latest \
               dev invoke /tmp/conf/config/examples/basic.agg.mem.yml \
                          /tmp/conf/fixtures/simple.json
    
    出力には都市の件数(例:New York、Baltimore)が表示されます。
  5. データ公開 – テストメッセージをKafkaにロードします:
    python3 cmd/publish-test-data.py --num-messages=10000 --topic="input-simple-agg-mem"
  6. 結果消費 – SQLFlowの出力を確認するには:
    docker exec -it kafka1 kafka-console-consumer \
        --bootstrap-server=kafka1:9092 \
        --topic=output-simple-agg-mem
    
  7. フルジョブ実行 – ストリームに対してSQLFlowを実行します:
    docker run -v $(pwd)/dev:/tmp/conf \
               -v /tmp/sqlflow:/tmp/sqlflow \
               -e SQLFLOW_KAFKA_BROKERS=host.docker.internal:29092 \
               turbolytics/sql-flow:latest \
               run /tmp/conf/config/examples/basic.agg.mem.yml \
                   --max-msgs-to-process=10000
    
    コンシューマーは
    {"city":"San Francisco504","city_count":1}
    のようなJSONレコードを表示します。

SQLFlowはデーモンとして動作し、Kafkaから継続的に読み取り、SQLロジックを実行し、結果をコンソールへ書き込みます。デモ後は設定ファイルを調整したり、Kafkaをスケールアップしたり、SQLFlowを本番パイプラインに組み込んで、馴染みのあるSQL構文でリアルタイム分析をプロトタイプできます。

本文

5 分以内に Kafka からデータを読み取るストリームプロセッサの作成


はじめに

SQL を実行して Kafka ストリームからデータを取得し、結果をコンソールへ書き出すストリームプロセッサを起動します。

必要なもの

項目説明
DockerDocker Engine がインストールされていること
sql‑flow リポジトリ
turbolytics/sql-flow
をローカルにクローンします:
git clone https://github.com/turbolytics/sql-flow.git
``` |
| **Python の依存関係** | リポジトリディレクトリでインストールします:  
```bash
cd path/to/sql-flow && pip install -r requirements.txt
``` |
| **sql‑flow Docker イメージ** | 最新版をプルします:  
```bash
docker pull turbolytics/sql-flow:latest
``` |
| **Kafka** | Docker Compose を使ってローカルで起動します:  
```bash
cd path/to/sql-flow && docker-compose -f dev/kafka-single.yml up -d
``` |

---

### SQLFlow 設定ファイルをテストする

SQLFlow は、設定ファイルがフィクスチャデータに対して正しく機能するかどうかを確認する CLI を提供します。

```bash
docker run \
-v $(pwd)/dev:/tmp/conf \
-v /tmp/sqlflow:/tmp/sqlflow \
turbolytics/sql-flow:latest \
dev invoke /tmp/conf/config/examples/basic.agg.mem.yml /tmp/conf/fixtures/simple.json

期待される出力

[
  {"city":"New York","city_count":28672},
  {"city":"Baltimore","city_count":28672}
]

Kafka ストリームに対して SQLFlow を実行する

  1. テストメッセージを Kafka トピックへ送信

    python3 cmd/publish-test-data.py --num-messages=10000 --topic="input-simple-agg-mem"
    
  2. Kafka コンソールコンシューマーを起動(SQLFlow の出力を見るため)

    docker exec -it kafka1 \
      kafka-console-consumer --bootstrap-server=kafka1:9092 \
      --topic=output-simple-agg-mem
    
  3. SQLFlow を起動

    docker run \
      -v $(pwd)/dev:/tmp/conf \
      -v /tmp/sqlflow:/tmp/sqlflow \
      -e SQLFLOW_KAFKA_BROKERS=host.docker.internal:29092 \
      turbolytics/sql-flow:latest \
      run /tmp/conf/config/examples/basic.agg.mem.yml --max-msgs-to-process=10000
    

期待されるコンソール出力

...{"city":"San Francisco504","city_count":1}
{"city":"San Francisco735","city_count":1}
{"city":"San Francisco533","city_count":1}
{"city":"San Francisco556","city_count":1}
...

同じ日のほかのニュース

一覧に戻る →

2025/12/09 8:53

Kroger acknowledges that its bet on robotics went too far

## Japanese Translation: > **概要:** > Kroger(クローガー)は、3つのロボット型ECフルフィルメントセンターを閉鎖することを発表し、約26億ドルの費用がかかるものの、EC利益率を約4億ドル向上させる見込みです。今回の閉鎖は、以前に「スピーク」施設を停止した後であり、UKテック企業Ocado(オカド)とのパートナーシップも業績不振により一時停止されたことに続くものです。臨時CEOのロン・サーガント氏は、Krogerが各Ocadoサイトを個別に検討し、大規模な資本投資なしで2,700店舗以上を活用した迅速配送へシフトする方針だと述べました。以前、Krogerは2024年中頃に新しいOcado技術を導入予定でしたが、サイトのパフォーマンスを疑問視し、2023年9月にプロジェクトを停止しました。 > > Pine Street AdvisorsのKen Fenyo氏は、密集都市外にOcadoセンターを配置することが主な欠陥であると指摘しました。低い注文量と長距離がモデルを非収益的にしていたのです。米国消費者はInstacartやDoorDashなどから30分以内の配送を重視し、UKで成功したOcadoの遅めで価格志向のモデルよりも優先します。 > > 今後、Krogerはサードパーティ配達パートナーとの関係強化を図り、高需要市場(AmazonのWhole Foods試験に似た)で資本負担が軽い店舗ベースの自動化をパイロットし、残存するOcadoサイトの運用をケースバイケースで決定します。自動化からの撤退はOcadoにとって大きな後退となり、その株価はIPO前レベルまで下落しています。これは密集都市外でマイクロフルフィルメント技術を導入する難しさを浮き彫りにしています。

2025/12/09 3:51

Jepsen: NATS 2.12.1

## Japanese Translation: (欠落している要素をすべて組み込み、根拠のない推測を除去したもの) --- ## 要約 NATS JetStream のデフォルト「lazy‑fsync」ポリシーは、データをディスクにフラッシュする頻度が 2 分ごとにしか設定されていないため、データ損失およびサービス障害の重大なリスクを生じます。ノードがクラッシュしたり、そのブロック(.blk)やスナップショットファイルが破損すると、最大 78 % のメッセージが消失し、クラスターがクォーラムを失う可能性があります(GitHub issue #7549 および #7556)。協調クラッシュでも、全ストリームが削除されるケース (#6888) や永続的に利用不可になるケース (#7556) が報告されています。この問題は、単一ノードのクラッシュでそのノード上のすべてのデータが消去される点と、2 分間隔という設定が安全なフラッシュ前に約 30 秒分のトラフィックを失うリスク(#7564)を伴うため、さらに深刻です。 JetStream v2.10.22 はクラッシュ時に全ストリームを削除するバグ(v2.10.23 で修正済み)が存在し、スナップショットファイルの切断や単一ビットエラーもノードがストリームデータを削除しクォーラム復旧に失敗して永続的に利用不可になる原因となっていました(#7556)。OS のクラッシュとプロセス停止またはネットワーク分離の組み合わせにより、単一ノードの障害でもデータ損失や持続的なスプリットブレインが発生する可能性があります(#7567)。 NATS は lazy‑fsync ポリシーを文書化していますが、現時点でデフォルト設定変更を推奨していません。Jepsen は fsync を「always」に設定するか、ユーザーに対して相関失敗リスクを強調するよう勧告しています。JetStream のドキュメントが主張する線形性(linearizability)と「自己修復・常時可用性」は非同期ネットワークの CAP 定理に矛盾し、Jepsen もこの点を指摘しています。 Jepsen の LazyFS テストは、書き込みをディスクフラッシュ前にバッファリングするシステムで電源障害をシミュレートし、同様の相関ハードウェア障害が類似した失敗を引き起こすことを示しています。NATS は issue #7549、#7556、および #7567 を積極的に調査中であり、クラッシュ削除バグ(#6888)は v2.10.23 で修正済みですが、lazy fsync のドキュメントは残り変更されていません。

2025/12/09 4:44

Icons in Menus Everywhere – Send Help

## Japanese Translation: 改善されたまとめ この記事は、macOS のデフォルト設定で全てのメニュー項目にアイコンを付ける慣習を批判し、多くの場合可視性の「補填」のために追加されていると主張しています。Google Sheets を極端な例として挙げ、すべてのオプションにアイコンが付いていることを指摘し、同じグループ内でアイコンの有無に不一致がある点や、アイコンがチェックマークやトグル状態と重なるケース(例えば Safari の「Safari」「File」「View」メニュー)も示しています。著者は、macOS が従来はデフォルトでメニューアイコンを避けていたことを指摘し、macOS Tahoe でそれらが広く導入されたことで Apple の 2005 年人間インターフェースガイドライン(任意のシンボルの使用を勧めない)と矛盾していると述べています。 とはいえ、Finder のウィンドウ配置オプション(Top Left, Bottom & Top, Quarters など)は本当に役立つアイコンであり、レイアウト選択を迅速に認識できる点は評価されています。著者は Apple が普遍的なアイコン化へ進むことで、デザイナーが不適切なアイコン使用に対抗しづらくなるとフラストレーションを表明し、メニューの美学に関する継続的な緊張を生んでいると指摘しています。ユーザー側では視覚的な雑然や混乱が起こり得ますが、開発者や UI デザイナーは使いやすさとスタイルのバランスを慎重に取らざるを得ません。この議論は将来の Apple UI ガイドラインに影響し、メニュー設計に関する業界全体の慣行にも波及する可能性があります。

Show HN: DuckDB for Kafka Stream Processing | そっか~ニュース