TGViewer
StarRocks and modern data stack StarRocks and modern data stack @modern_data_stack · 541 subscribers
Post #7 428
Про мощь тестов и кафку в старроксе.

Абсолютно случайно обнаружил интересную проблему в недавно заведенном потоке данных в starrocks - время в строчке отличалось от целевого на 1 секунду примерно в 50% случаев. Путем долгого копания и проверки исходных данных конечно я вышел на самого себя - картинка в заголовке ровно про это :)

А теперь откуда растут корни такого странного запроса.

В starrocks есть встроенный способ загрузки потоковых данных из kafka в таблички без всяких промежуточных таблиц и прочего непотребства - routine load. Работает быстро, стабильно, с небольшой нагрузкой, и даже умеет делать обновление по условию.
Но есть и ряд недостатков:
- нельзя фильтровать данные по полю, которого нет в итоговой табличке (на примере снизу event_name), но при этом можно отбрасывать использованные в других функциях колонки (payload)
- несмотря на большие количество функций по работе с временем нельзя получить datetime с миллисекундами из unixtime с миллисекундами

И про тесты: несмотря на двойной заслон тестов - мы поднимаем каждое новое задание через дев стенд и полные интеграционные тесты с прогоном fuzz данных, а далее потоковые данные по возможности сверяем с осевшими на проде - баг с картинки был пропущен :) Известная поговорка: тесты позволяют найти старые проблемы...


CREATE ROUTINE LOAD dds.quotes ON quotes
COLUMNS(
event_name
, payload
, project=JSON_QUERY(payload, '$.project')
, pair=JSON_QUERY(payload, '$.code')
, ts=TIMESTAMPADD(MILLISECOND, cast(substring(cast(JSON_QUERY(payload, '$.timestamp_ms') as varchar(13)), -3) as int), FROM_UNIXTIME(CAST(JSON_QUERY(payload, '$.timestamp_ms') AS BIGINT) / 1000))
, ask=JSON_QUERY(payload, '$.ask')
, bid=JSON_QUERY(payload, '$.bid')
, mid=JSON_QUERY(payload, '$.mid')
),
WHERE event_name = 'ticks.platform'
PROPERTIES (
"max_batch_interval"="30",
"format"="json",
"jsonpaths"="[\"$.event_name\",\"$.payload\"]",
"timezone"="Europe/Moscow"
)
FROM KAFKA (
"kafka_broker_list"="kafka-main:9092",
"kafka_topic"="ticks.platform",
"property.kafka_default_offsets"="OFFSET_BEGINNING",
"property.group.id"="dp_sr_quotes"
);
  • 👍 6
  • ❤ 1
  • 🔥 1
More from @modern_data_stack
  1. Sep 22, 2026За долгом всегда придут Где-то в прошлой до-ии жизни я написал негативную статью на хабре…
  2. Sep 2, 2026DE, AI и та самая демократизация данных Мне кажется, что 80% успеха команд данных в соврем…
  3. Aug 25, 2026Выбор CDC сделан Нам очень хотелось сделать CDC из наших MySQL в Hadoop вместо StarRocks:…
  4. Aug 3, 2026Какой-то микс нынче в дата мире происходит Сократят ли кожаных в пользу AI? Я тут погуглил…
  5. Jul 1, 2026DBX Так ли уж много надо для счастья на сегодняшний день? Полный бак бензина, хороший вели…
  6. Jun 30, 2026Обновки подъехали Абсолютно случайно в ln увидел, что в SQLMesh завезли поддержку StarRock…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →