А сам сервак запускает виртуальный поток на http запрос для обработки этого запроса?
Читать полностью…Получается можно тупо автокоммитить оффсет даже если сообщение не то, всё-равно он свой на каждую КГ насколько помню)
Читать полностью…Ага, я тоже подумал вчера что мануал ак выставить и либо по заголовкам, либо по результату парсинга скипать чтобы другая группа пришла и прочитала.
Но вероятно, чтобы минимизировать скипы нужно будет подумать про стратегию раутинга и ассайна консьюмеров.
В идеале чтобы в партишнах каждой КГ было примерно поровну А и Б сообщений. И не получилось что КГ на А будет читать партишны куда преимущественно Б сыплются.
Ещё в порядке бреда настроить раутинг чтоб в половину партишнов А, в половину Б шли(по ключу например) и подгадать чтобы А КГ на А партишны ассайнился тем же RangeAssignor, а Б на Б.
Но выглядит что мало вероятно что стабильно работать будет, а если и будет, то легко сломать, и при ребалансах ХЗ как себя поведёт.
А, вообще, интересно почему с т.з. архитектуры решили писать в один топик разные виды сообщений. Наверняка не глупый человек дизайнил.
Существуют разные стратегии https://chrzaszcz.dev/2021/09/kafka-assignors/, дефолтая вроде как RangeAssignor. Но можно настаивать через вот эту пропертю https://kafka.apache.org/documentation/#consumerconfigs_partition.assignment.strategy
Читать полностью…кафка не умеет, spring-cloud-stream умеет (хотя я уже не уверен, так как сэмпл из сообщения выше не завелся на последних версиях 😃), либо я не так понял, как это дело работает
Читать полностью…Я думаю, вопрос про необходимый скилл для кода без особого количества брака, а не умение расставлять кейворд
Читать полностью…насчет системных хз, но в целом да, там уже продвинутый уровень, в расточате бывает такую хрень обсуждают, что я хз откуда они все это знают. Если сейф раст проверяется компилятором, то ансейф нет (но местами в дебаге вставлены проверки), не достаточно запустить и проверить что работает.
Читать полностью…Но опять же, я размышляю, со стримами в реббите не работал. Может и глупость говорю.
Читать полностью…Консьюмер в кролике потребляет из очереди. Очередь байндится к эксченджу. На байндинге задаётся роутинг
Читать полностью…А как идея использовать виртуальные треды для Кафка консьюмеров флоу которых в конце-концов упираются в IO вызов ?
Что бы избавиться от лишнего мемори оверхеда
да он в отпуске, как вернется, я ему напишу об этом, а пока сделал, как написал выше.
за рассуждения тож спасиб)
Ну тип как ключ -- это просто раскидывать в разные партишены. А группу то как на партишен ассайнить? Вручную? Что то меня в этой схеме смущает всё.
Читать полностью…привет
тот кейс, который ты описал с партициями и группами - рабочий 100%, но вот привязываться к определенными партициям в перспективе масштабирования, наверное, не круто (усложняет логику как минимум, на мой взгляд), поэтому я его сразу отмел. По поводу отдельного топика - самый простой и идеальный вариант, но, к сожалению, на разбиение на два топика лично я не могу повлиять (архитектуру описывал не я).
https://github.com/spring-cloud/spring-cloud-stream-samples/tree/main/routing-samples я про вот такой роутинг. Думал, мб кто-то такое делал, хотя выглядит, как костылец, конечно)
Ну и с каждым днем убеждаюсь, что простых вариантов только два и те описаны тобой в сообщении.
Сделаю две группы для одного топика, в одном и втором консюмере буду скипать неподходящее сообщение, определяя их по признаку из хедеров.
пасиба за ответ и свой опыт)
ансейф - это как "эффект", любая функция может быть помечена как ансейф, её можно вызывать только в ансейф блоке
Читать полностью…Рэбиту чтобы гарантии соблюсти нужно fsync делать на диск. Кафке нет, так как несколько брокеров с репликацией(за счёт этого высокие гарантии). Это не говоря о других нюансах.
Читать полностью…тогда надо по старинке на указателях и это ансейф раст и безопасность раста там уже местами не работает.
вообще у многих тут по расту мнения неправильные.
раст это больше системный язык, бесплатные абстракции, нет GC и т.д.
джава это прикладной язык
и они друг другу не конкуренты, джсоны всегда будет проще перекладывать на прикладном языке, раст тут в большинстве случаев не нужен, а часто даже перфа питона хватает
раст нужен если нужна нативная программа (например dll/so плагин для какой-нибудь программы)
либо нужна производительность, HFT какой-нибудь
либо много инстансов, типа сайдкары для тысяч контейнеров (например linkerd)
получается, раст никогда не будет настолько популярен, как прикладные языки типа джава/сишарп/го/питон.
по поводу UB в расте:
в безопасном расте UB отсутствует (по факту есть, ошибки в компиляторе присутствуют, но их воспроизвести не простая задача, см. cve.rs)
в раст нет (в основном) вакансий для джунов и мидлов, только синьоры, потому что надо писать быстрый код (иначе можно было взять ту же джаву)
соответственно нужно писать ансейф код, т.к. не везде компилятор понимает, что это безопасно или не может гарантировать безопасность.
но там не все так плохо, к ансейф методам написаны требования (секция SAFETY), как соблюсти безопасность