Как стать автором
Поиск
Написать публикацию
Обновить

Комментарии 5

А что делать, если нужно читать из кафки, изменить данные и сохранить в clickhouse? Что еще можно предпринять кроме накопления батча, fetch/commit?

За изменение данных отвечает мат вьюха (консьюмер), в ней можно накручивать любую логику изменений, а не просто переливку данных. Но учтите, что так делать не желательно, первичный слой (raw, stage, history, как угодно называйте его) желательно должен соответствовать контракту данных (что в кафке лежит - в таком же виде и у вас в клике). Иначе можно оказаться в неприятной ситуации, например: потеря данных, если решили мат вьюхой фильтровать; потеря данных из-за изменения самих данных; данные в вашем клике будут отличаться от данных других потребителей кафки. Заливайте данные в клик, а внутри него уже преобразуйте, как вам нужно.

А если нам всë-таки нужно, чтобы консьюмер перешëл к новым сообщениям, оставив "корявое" сообщение необработанным? То есть мы, например, действительно ожидали в message увидеть число, но по какой-то причине пришла строка. Какова будет хорошая практика, чтобы проигнорировать такое сообщение со строкой и затем спокойно продолжить читать (и складывать в итоговую таблицу) корректные сообщения?

Тут уже каждый сам решает. По-хорошему отклонения от контракта данных быть не должно. Если в кафку полилось что-то не валидное - не перекладывайте ответственность на консьюмера, ведь если бы не было кафки, то продьюсер пытался бы вставлять точно такое же не валидное сообщение в клик, и точно также ловил бы ошибку. Вы ведь не побежали бы в этой ситуации что-то править в клике (менять типы колонок у полей), верно? Именно продьюсер бы сидел и правил свой код. И в случае с кафкой должно быть тоже самое, она в архитектуре DWH не для того нужна, чтобы переложить ответственность с продьюсера на консьюмера.

Ну а вообще у движка кафка есть настройки на этот случай - kafka_skip_broken_messages, kafka_handle_error_mode, например. Также можно и в консьюмере (мат вьюхе) накрутить логику на не валидное поле, чтобы преобразовывать его к нужному типу (я бы выбрал этот вариант, не неся потери данных). Но, крайне не рекомендую так делать.

Ну на кого не взвали ответственность, решать проблему всё равно консьюмеру. А ответ на вопрос особо и не дан. Пересоздавать кафка таблицу с новыми параметрами? И возникает много вопросов. Как настроен батчинг? Как узнать какое именно сообщение корявое, если у тебя в батче например 10000 записей? В целом если нужно быстро что-то прочитать в Кафке для тестов, плюс быть готовым потерять данные из-за багов продюсера, кафка движок подойдёт. Для продакшена, я всё же его не рекомедую.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации