концумир на каком языке
Перевод песни Komm zu mir (Unheilig)
Komm zu mir
Иди ко мне
Das letzte Sonnenlicht
zerfließt auf deiner Haut
dein warmer Körper bebt
das Schicksal bäumt sich auf
spürst du den Augenblick
wie er zerfällt im Abendglanz
der Todeskuss vor meinem Tanz
Komm zu mir, komm zu mir
dort wo dein tiefer Schmerz zerschellt
Komm zu mir, komm zu mir
dort wo nur Schattenschönheit zählt
komm zu mir, komm zu mir
am Himmel blüht ein neuer Stern
komm zu mir, komm zu mir
neige dein Haupt vor deinem Herrn
Das Kind der Nacht erwacht
die Schöpfung ist der Tod
die neue Schönheit blüht
im dunkeln Abendrot
Spürst du den Augenblick
wie er dich belebt in tiefer Nacht
der Todeskuss und Satan lacht
Neige dein Haupt
Neige dein Haupt vor deiner Herrn
Am dunklen Himmel blüht ein neuer heller Stern
Последний лучик солнца
бежит по твоей коже,
твое теплое тело содрогается,
судьба становится на дыбы.
Замечаешь ли тот момент,
когда он исчезает в блеске вечера:
смертельный поцелуй перед моим танцем?
Подойди ко мне, подойди ко мне,
там, где разбита твоя страшная боль.
Подойди ко мне, подойди ко мне,
там, где царит лишь тени красота.
Подойди ко мне, подойди ко мне,
на небе расцветает новая звезда.
Подойди ко мне, подойди ко мне,
преклони голову пред твоим господином.
Замечаешь ли ты момент,
когда он оживляет тебя в ночи:
поцелуй смерти и сатанинский смех?
Преклони голову,
Преклони голову пред твоим господином,
В темном небе расцветает новая звезда.
Текст песни Komm Zu Mir
Das letzte Sonnenlicht
Zerfließt auf deiner Haut
Dein warmer Körper bebt
Das Schicksal baumt sich auf
Spürst du den Augenblick
Wie er zerfällt im Abendglanz
Der Todeskuss vor meinem Tanz
Komm zu mir, komm zu mir
Dort wo dein tiefer Schmerz zerschellt
Komm zu mir, komm zu mir
Dort wo nur Schattenschönheit zöhlt
Komm zu mir, komm zu mir
Am Himmel bluht ein neuer Stern
Komm zu mir, komm zu mir
Neige dein Haupt vor deinem Herrn
Das Kind der Nacht erwacht
Die Schöpfung ist der Tod
Die neue Schonheit blüht
Im dunkeln Abendrot
Spürst du den Augenblick
Wie er dich belebt in tiefer Nacht
Der Todeskuss und Satan lacht
Neige dein Haupt
Neige dein Haupt vor deiner Herrn
Am dunklen Himmel blüht ein neuer heller Stern
Das letzte Sonnenlicht
Zerfließt auf deiner Haut
Dein warmer Körper bebt
Das Schicksal baumt sich auf
Spürst du den Augenblick
Wie er zerfällt im Abendglanz
Der Todeskuss vor meinem Tanz
Перевод песни Komm Zu Mir
Последний солнечный свет
Растекается по твоей коже.
Твое теплое тело дрожит,
Судьба противится.
Ты чувствуешь мгновение,
Как оно распадается в вечернем блеске?
Поцелуй смерти перед моим танцем.
Приди ко мне, приди ко мне
Туда, где разобьется твоя глубокая боль.
Приди ко мне, приди ко мне,
Туда, где ценится лишь красота теней.
Приди ко мне, приди ко мне,
На небе расцветает новая звезда.
Приди ко мне, приди ко мне,
Склони голову перед своим господином.
Склони свою голову,
Склони голову перед своим господином.
В темном небе расцветает новая яркая звезда.
Последний солнечный свет
Растекается по твоей коже.
Твое теплое тело дрожит,
Судьба противится.
Ты чувствуешь мгновение,
Как оно распадается в вечернем блеске?
Поцелуй смерти перед моим танцем.
Что такое e-commerce и как устроена онлайн-торговля
Содержание
В действительности, e-commerce — это не только финансовые или торговые транзакции, осуществляемые с помощью сетей, но и цепочки глобальных бизнес-процессов, связанных с проведением транзакций.
Сегодня к электронной коммерции относят электронную покупку или продажу товаров через онлайн-сервисы или через интернет, мобильную коммерцию, электронные переводы средств, управление цепочками поставок, интернет-маркетинг, онлайн-обработку транзакций, электронный обмен данными (EDI), системы управления запасами и автоматизированные системы сбора данных.
Виды e-commerce
Электронную торговлю можно классифицировать по двум признакам:
Что продают:
Кому продают:
Два самых распространенных типа — b2c и b2b.
Как развивается e-commerce в России и мире?
С ростом цифровизации и массовым переходом в онлайн e-commerce стала драйвером ключевых изменений в мировой экономике. Доступ к электронной коммерции сегодня возможен с любого смарт-устройства: на конец 2020 года в мире насчитывалось почти 10 млрд смартфонов, компьютеров и планшетов, подключенных к интернету. Это уже превышает население Земли (почти 8 млрд человек).
Вот главные цифры на сегодня:
По данным INFOLine, объем рынка электронной коммерции в России за 2020 год составил 2,7 трлн руб. Это на 34% больше, чем годом ранее.
Поддержка электронной коммерции в России на период до 2024 года регулируется нацпроектом «Цифровая экономика». Основными целями документа являются повышение внутренних затрат на развитие цифровой экономики за счет всех источников (по доле в валовом внутреннем продукте страны) минимум в три раза по сравнению с 2017 годом, и создание устойчивой, безопасной и общедоступной информационно-телекоммуникационной инфраструктуры высокоскоростной передачи, обработки и хранения больших объемов данных.
Самые успешные кейсы е-commerce
Alibaba
Модель Alibaba аналогична eBay: она выступает в качестве агрегатора для продавцов — физлиц, магазинов или производителей — которые сами отправляют товар покупателям.
JD.com
Главный конкурент Alibaba в Китае. В отличие от Alibaba, JD.com работает по модели Amazon: отгружает товары сторонних продавцов с собственного склада и отправляет через свою службу доставки. На конец 2020 года у компании было более 900 складов общей площадью 21 млн кв. м. В составе холдинга есть своя социальная платформа — Jingxi, а также сети магазинов у дома Xintonglu и JD New Markets и даже собственное направление коммерческой недвижимости. В ближайшем будущем JD планирует запустить свою цифровую валюту — e-CNY.
Amazon
Amazon — самый крупный розничный продавец в сфере e-commerce в США и один из крупнейших в мире. Компания располагает огромной сетью складов и сортировочных центров, а также собственной службой доставки, которая использует дронов и роботов, а в 2020 году приобрела еще и самолеты Boeing 767. Помимо основной b2c-платформы, есть также Amazon Business для клиентов-юрлиц.
Сейчас 60% дохода Amazon приносят ИТ-решения Amazon Web Services — облачные хранилища и сервисы. Компания регулярно запускает различные продукты и сервисы под своим брендом: электронные читалки Kindle, элементы «умного» дома, голосовой помощник Alexa, онлайн-кинотеатр Amazon Prime. У Amazon есть и офлайн-магазины Amazon Go. Они работают при помощи нейросетей с распознаванием лиц и компьютерным зрением: здесь нет касс и продавцов, а покупки оплачиваются автоматически через приложение.
eBay был создан в 1995 году как сервис онлайн-аукционов c2c: продавцы выставляли на аукцион вещи (часто подержанные), а покупатели делали ставки. Доставка товаров при этом лежит на продавце, а сам сервис берет комиссию за размещение лотов и занимается урегулированием споров. Позже на платформе появились коммерческие аккаунты частных предпринимателей и магазинов, а покупать стало можно и по фиксированной цене.
Wildberries
Wildberries продает одежду, обувь, аксессуары, бытовую технику и электронику, товары для дома. Все это компания доставляет с собственных складов через пункты выдачи (в 2020-м доля таких заказов составила 93%) или курьеров. В 2020 году оборот компании вырос на 96% по сравнению с 2019-м — до 437,2 млрд рублей, а число заказов — до 323,8 млн, достигнув 1,5 млн в сутки, что вдвое больше прошлогоднего показателя. Помимо России компания также работает в странах СНГ, Польше, Словакии, Израиле и планирует выйти на рынок Германии.
Компанию основали в 1991 году. Как и Amazon, первый интернет-гипермаркет в России начинал с торговли книгами. Сегодня 24% продаж Ozon приходится на электронику, остальное распределено между книгами, бытовой техникой, одеждой, косметикой, продуктами и прочими товарами. Как и Wildberries, маркетплейс сделал ставку на расширение пунктов самовывоза, причем с 2020 года делает это только под собственным брендом, а не через партнеров. Ozon доставляет товары в собственные постаматы и курьерами. Компания также запустила сервис по продаже авиабилетов Ozon.Travel.
«Яндекс.Маркет»
«Яндекс.Маркет» пришел на рынок 20 лет назад. До 2018 года развивался как агрегатор для интернет-магазинов, с 2018 года параллельно строил маркетплейс «Беру», который в 2020 году стал частью «Яндекс.Маркета». Сегодня это — маркетплейс, где магазины могут продавать свои товары, а пользователи — совершать покупки, выбирая из ассортимента в 4 млн товарных наименования.
Продавцам «Яндекс.Маркет» предлагает четыре модели сотрудничества с маркетплейсом:
Маркетплейс «Маркета» также предлагает другие сервисы для продавцов и покупателей: поиск по десяткам фильтров, сравнение цен на один и тот же товар, отзывы покупателей, рейтинги магазинов и платное продвижение.
На конец 2020 года на «Яндекс.Маркете» продавали свои товары более 8 тыс. продавцов, по рекламной модели размещалось 25 тыс. магазинов-партнеров, ежедневная аудитория достигла 6 млн уникальных посетителей. Оборот компании в 2020 году вырос в 1,5 раза — до 28,8 млрд руб.
Будущее электронной торговли
Среди глобальных трендов в развитии электронной торговли стоит выделить:
Другими словами, магазины стремятся сделать процесс покупки не только максимально быстрым и комфортным, но еще и увлекательным.
Электронная торговля берет курс на персонализацию: за счет «умного» поиска и подбора товаров, персональных рекомендаций, онлайн-стилистов и прочих инструментов. ИИ сможет анализировать все ваши покупки и предпочтения, составляя личные рекомендации с учетом ваших особенностей. Продуктовые сети уже реализуют подбор товаров на основе генетического теста и базовых медицинских показателей.
Подробнее о том, как будет развиваться онлайн-торговля продуктами и готовой едой — в материале РБК Трендов.
Еще один заметный тренд — гибридные форматы: когда офлайн-супермаркеты и розничные сети переходят в онлайн и открывают целые зоны для самовывоза или оформления покупок через интернет. Другой пример сочетания офлайн- и онлайн-формата — магазины Amazon Go: клиент может купить любой товар без касс и продавцов с помощью приложения и камер с распознаванием лиц.
Среди других трендов:
consumer
1 consumer
British consumers are paying much more than their counterparts in mainland Europe for a wide range of goods. — Британские потребители покупают многие товары по значительно более высокой цене, чем потребители материковой Европы.
Our consumers expect products which are not only delicious (and safe) but which have been produced fairly and ethically. — Наши потребители ожидают таких продуктов, которые не только вкусны и безопасны для здоровья, но еще и были произведены надлежащим образом и в согласии с этическими нормами.
An average consumer for heating in Turkey uses fuel wood at a rate of 0.75 m3 yr. — Среднестатистический потребитель отопления в Турции использует 0,75 м3 в год древесного топлива.
2 consumer
3 consumer
4 consumer
абонент энергоснабжающей организации
Потребитель электрической энергии (тепла), энергоустановки которого присоединены к сетям энергоснабжающей организации.
[ ГОСТ 19431-84]
Тематики
потребитель
Гражданин, получающий, заказывающий либо имеющий намерение получить или заказать услуги для личных нужд.
[ ГОСТ Р 50646-94]
потребитель
Получатель продукции, предоставляемой поставщиком.
Примечания
1 В контактной ситуации потребитель может быть назван покупателем.
2 Потребителем может быть, например, конечный потребитель, пользователь, льготно обслуживаемый потребитель или покупатель.
3 Потребитель может быть или внешним, или внутренним.
[ИСО 8402-94]
потребитель
Организация или лицо, получающие продукцию.
Пример
Клиент, заказчик, конечный пользователь, розничный торговец, бенефициар и покупатель.
Примечание
Потребитель может быть внутренним или внешним по отношению к организации.
[ ГОСТ Р ИСО 9000-2008]
потребитель
Субъект, который использует машину и связанное с ней электрическое оборудование.
[ ГОСТ Р МЭК 60204-1-2007]
потребитель
Сторона, предъявляющая требования к машинам, оборудованию, системам и компонентам и оценивающая соответствие продукции этим требованиям.
[ГОСТ ИСО / ТО 10949- 2007]
потребитель
Лицо (или компания), имеющее намерение заказать или приобрести либо заказывающий, приобретающий или использующий товары (работы, услуги) для собственных нужд.
[ http://slovar-lopatnikov.ru/]
Тематики
потребитель (электроэнергии)
—
[Я.Н.Лугинский, М.С.Фези-Жилинская, Ю.С.Кабиров. Англо-русский словарь по электротехнике и электроэнергетике, Москва, 1999 г.]
Тематики
потребитель тепла
Предприятие, организация, территориально обособленный цех, строительная площадка, квартира, у которых приемники тепла присоединены к тепловой сети и используют тепло.
[ ГОСТ 19431-84]
Синонимы
потребитель электрической энергии
Юридическое или физическое лицо, осуществляющее пользование электрической энергией (мощностью).
[ ГОСТ 13109-97]
потребитель электрической энергии
Потребителем электрической энергии называется предприятие, организация, квартира, у которых приемники электрической энергии присоединены к электрической сети и используют электрическую энергию.
[РД 34.20.185-94]
потребитель (абонент) электрической энергии
Юридическое лицо, осуществляющее пользование электрической энергией (мощностью).
[ Министерство топлива и энергетики РФ. Правила учета электрической энергии ]
потребитель электрической энергии
Предприятие, организация, территориально обособленный цех, строительная площадка, квартира, у которых приемники электрической энергии присоединены к электрической сети и используют электрическую энергию.
[ ГОСТ 19431-84]
consumer
a user of electricity provided by an electricity supply system, generally a distribution system
[IEV ref 604-01-03]
consumer
customer
the party who receives electricity from the supply or distribution undertaking
[IEV ref 691-01-04]
usager
consommateur
utilisateur d’une installation consommant de l’énergie électrique provenant d’un réseau, généralement de distribution
[IEV ref 604-01-03]
client
partie qui reçoit de l’électricité d’un fournisseur
[IEV ref 691-01-04]
1.5.2. Расчетным учетом электроэнергии называется учет выработанной, а также отпущенной потребителям электроэнергии для денежного расчета за нее.
Счетчики, устанавливаемые для расчетного учета, называются расчетными счетчиками.
[ПУЭ]
Тематики
Синонимы
Сопутствующие термины
D. Verbraucher von Electroenergie
Предприятие, организация, территориально обособленный цех, строительная площадка, квартира, у которых приемники электрической энергии (тепла) присоединены к электрической (тепловой) сети и используют электрическую энергию (тепло)
Потребитель электрической энергии (тепла), энергоустановки которого присоединены к сетям энергоснабжающей организации
3.47 потребитель (consumer): Участник строительного процесса, приобретающий партию продукции для дальнейшей ее переработки или использования.
8.8 потребитель (consumer): Отдельный член общества, покупающий или использующий товары, имущество или услуги для частных целей [21].
5 consumer
6 consumer
7 consumer
8 consumer
9 consumer
10 consumer
11 consumer
12 consumer
13 consumer
14 consumer
15 consumer
16 consumer
17 consumer
18 consumer
19 consumer
20 consumer
См. также в других словарях:
consumer — con·sum·er n: one that utilizes economic goods; specif: an individual who purchases goods for personal use as distinguished from commercial use Merriam Webster’s Dictionary of Law. Merriam Webster. 1996. consumer … Law dictionary
consumer — [ kɔ̃syme ] v. tr. <conjug. : 1> • v. 1120; lat. consumere « détruire » → consommer 1 ♦ (XIIe) Littér. Épuiser complètement les forces de (qqn). ⇒ abattre, épuiser, fatiguer, miner, ronger, user. La passion, le chagrin le consume. ♢ (XVIIe) … Encyclopédie Universelle
consumer — con‧sum‧er [kənˈsjuːmə ǁ ˈsuːmər] noun [countable] 1. MARKETING a person who buys goods, products, and services for their own use, not for business use or to resell: • Demand for autos is increasing as consumers feel more confident about the… … Financial and business terms
Consumer IR — Consumer IR, consumer infrared, or CIR, refers to a wide variety of devices employing the infrared electromagnetic spectrum for wireless communications. Most commonly found in television remote controls, infrared ports are equally ubiquitous in… … Wikipedia
consumer — Consumer, et user, Absumere, Consumere, Prodigere. Consumer tout à fait, Abuti. Consumer les biens d autruy, Comedere aliquem. Consumer en frottant, Atterere. Le soing me consume et gaste, Coquit me cura. Consumer et user à force de frotter,… … Thresor de la langue françoyse
consumer — CONSUMER. v. a. Détruire, user, réduire à rien. Le feu consuma tout ce grand édifice en deux heures de temps. La victime fut consumée par le feu. Le temps consume toutes choses. Il consume tout son bien en débauches. Il a consumé son patrimoine.… … Dictionnaire de l’Académie Française 1798
consumer — early 15c., one who squanders or wastes, agent noun from CONSUME (Cf. consume). In economic sense, one who uses up goods or articles (opposite of producer) from 1745. Consumer goods is attested from 1890. In U.S., consumer price index calculated… … Etymology dictionary
Consumer — Con*sum er (k[o^]n*s[=u]m [ e]r), n. 1. One who, or that which, consumes; as, the consumer of food. [1913 Webster] 2. (Econ.) the person or organization that uses some item of commerce or service in its own acitities, as opposed to reselling the… … The Collaborative International Dictionary of English
consumer — CONSUMER. v. a. User, dissiper, destruire, reduire à rien. Le feu consuma tout ce grand édifice en deux heures de temps. la victime fut consumée par le feu. le temps consume toutes choses. il consume tout son bien en desbauches. il a consumé son… … Dictionnaire de l’Académie française
consumer — /konˈsumər, ingl. kənˈsjuːmə(r)/ [dal v. ingl. to consume «consumare»] A s. m. e f. inv. consumatore B agg. inv. (nel marketing) privato CONTR. business, business to business … Sinonimi e Contrari. Terza edizione
consumer — [n] person who buys merchandise, services buyer, customer, end user, enjoyer, purchaser, shopper, user; concept 348 Ant. marketer, merchandiser … New thesaurus
Apache Kafka: основы технологии
У Kafka есть множество способов применения, и у каждого способа есть свои особенности. В этой статье разберём, чем Kafka отличается от популярных систем обмена сообщениями; рассмотрим, как Kafka хранит данные и обеспечивает гарантию сохранности; поймём, как записываются и читаются данные.
Статья подготовлена на основе открытого занятия из видеокурса по Apache Kafka. Авторы — Анатолий Солдатов, Lead Engineer в Авито, и Александр Миронов, Infrastructure Engineer в Stripe. Базовые темы курса доступны на Youtube.
Kafka и классические сервисы очередей
Для первого погружения в технологию сравним Kafka и классические сервисы очередей, такие как RabbitMQ и Amazon SQS.
Системы очередей обычно состоят из трёх базовых компонентов:
1) сервер,
2) продюсеры, которые отправляют сообщения в некую именованную очередь, заранее сконфигурированную администратором на сервере,
3) консьюмеры, которые считывают те же самые сообщения по мере их появления.
Базовые компоненты классической системы очередей
В веб-приложениях очереди часто используются для отложенной обработки событий или в качестве временного буфера между другими сервисами, тем самым защищая их от всплесков нагрузки.
Консьюмеры получают данные с сервера, используя две разные модели запросов: pull или push.
pull-модель — консьюмеры сами отправляют запрос раз в n секунд на сервер для получения новой порции сообщений. При таком подходе клиенты могут эффективно контролировать собственную нагрузку. Кроме того, pull-модель позволяет группировать сообщения в батчи, таким образом достигая лучшей пропускной способности. К минусам модели можно отнести потенциальную разбалансированность нагрузки между разными консьюмерами, а также более высокую задержку обработки данных.
push-модель — сервер делает запрос к клиенту, посылая ему новую порцию данных. По такой модели, например, работает RabbitMQ. Она снижает задержку обработки сообщений и позволяет эффективно балансировать распределение сообщений по консьюмерам. Но для предотвращения перегрузки консьюмеров в случае с RabbitMQ клиентам приходится использовать функционал QS, выставляя лимиты.
Как правило, приложение пишет и читает из очереди с помощью нескольких инстансов продюсеров и консьюмеров. Это позволяет эффективно распределить нагрузку.
Типичный жизненный цикл сообщений в системах очередей:
Типичный жизненный цикл сообщений в системах очередей
С базовыми принципами работы очередей разобрались, теперь перейдём к Kafka. Рассмотрим её фундаментальные отличия.
Как и сервисы обработки очередей, Kafka условно состоит из трёх компонентов:
1) сервер (по-другому ещё называется брокер),
2) продюсеры — они отправляют сообщения брокеру,
3) консьюмеры — считывают эти сообщения, используя модель pull.
Базовые компоненты Kafka
Пожалуй, фундаментальное отличие Kafka от очередей состоит в том, как сообщения хранятся на брокере и как потребляются консьюмерами.
В этом кроется главная мощь и главное отличие Kafka от традиционных систем обмена сообщениями.
Теперь давайте посмотрим, как Kafka и системы очередей решают одну и ту же задачу. Начнём с системы очередей.
Представим, что есть некий сайт, на котором происходит регистрация пользователя. Для каждой регистрации мы должны:
1) отправить письмо пользователю,
2) пересчитать дневную статистику регистраций.
В случае с RabbitMQ или Amazon SQS функционал может помочь нам доставить сообщения всем сервисам одновременно. Но при необходимости подключения нового сервиса придётся конфигурировать новую очередь.
Kafka упрощает задачу. Достаточно послать сообщения всего один раз, а консьюмеры сервиса отправки сообщений и консьюмеры статистики сами считают его по мере необходимости.
Kafka также позволяет тривиально подключать новые сервисы к стриму регистрации. Например, сервис архивирования всех регистраций в S3 для последующей обработки с помощью Spark или Redshift можно добавить без дополнительного конфигурирования сервера или создания дополнительных очередей.
Кроме того, раз Kafka не удаляет данные после обработки консьюмерами, эти данные могут обрабатываться заново, как бы отматывая время назад сколько угодно раз. Это оказывается невероятно полезно для восстановления после сбоев и, например, верификации кода новых консьюмеров. В случае с RabbitMQ пришлось бы записывать все данные заново, при этом, скорее всего, в отдельную очередь, чтобы не сломать уже имеющихся клиентов.
Структура данных
Наверняка возникает вопрос: «Раз сообщения не удаляются, то как тогда гарантировать, что консьюмер не будет читать одни и те же сообщения (например, при перезапуске)?».
Для ответа на этот вопрос разберёмся, какова внутренняя структура Kafka и как в ней хранятся сообщения.
Каждое сообщение (event или message) в Kafka состоит из ключа, значения, таймстампа и опционального набора метаданных (так называемых хедеров).
Сообщения в Kafka организованы и хранятся в именованных топиках (Topics), каждый топик состоит из одной и более партиций (Partition), распределённых между брокерами внутри одного кластера. Подобная распределённость важна для горизонтального масштабирования кластера, так как она позволяет клиентам писать и читать сообщения с нескольких брокеров одновременно.
Когда новое сообщение добавляется в топик, на самом деле оно записывается в одну из партиций этого топика. Сообщения с одинаковыми ключами всегда записываются в одну и ту же партицию, тем самым гарантируя очередность или порядок записи и чтения.
Для гарантии сохранности данных каждая партиция в Kafka может быть реплицирована n раз, где n — replication factor. Таким образом гарантируется наличие нескольких копий сообщения, хранящихся на разных брокерах.
У каждой партиции есть «лидер» (Leader) — брокер, который работает с клиентами. Именно лидер работает с продюсерами и в общем случае отдаёт сообщения консьюмерам. К лидеру осуществляют запросы фолловеры (Follower) — брокеры, которые хранят реплику всех данных партиций. Сообщения всегда отправляются лидеру и, в общем случае, читаются с лидера.
Чтобы понять, кто является лидером партиции, перед записью и чтением клиенты делают запрос метаданных от брокера. Причём они могут подключаться к любому брокеру в кластере.
Основная структура данных в Kafka — это распределённый, реплицируемый лог. Каждая партиция — это и есть тот самый реплицируемый лог, который хранится на диске. Каждое новое сообщение, отправленное продюсером в партицию, сохраняется в «голову» этого лога и получает свой уникальный, монотонно возрастающий offset (64-битное число, которое назначается самим брокером).
Как мы уже выяснили, сообщения не удаляются из лога после передачи консьюмерам и могут быть вычитаны сколько угодно раз.
Время гарантированного хранения данных на брокере можно контролировать с помощью специальных настроек. Длительность хранения сообщений при этом не влияет на общую производительность системы. Поэтому совершенно нормально хранить сообщения в Kafka днями, неделями, месяцами или даже годами.
Consumer Groups
Теперь давайте перейдём к консьюмерам и рассмотрим их принципы работы в Kafka. Каждый консьюмер Kafka обычно является частью какой-нибудь консьюмер-группы.
Каждая группа имеет уникальное название и регистрируется брокерами в кластере Kafka. Данные из одного и того же топика могут считываться множеством консьюмер-групп одновременно. Когда несколько консьюмеров читают данные из Kafka и являются членами одной и той же группы, то каждый из них получает сообщения из разных партиций топика, таким образом распределяя нагрузку.
Вернёмся к нашему примеру с топиком сервиса регистрации и представим, что у сервиса отправки писем есть своя собственная консьюмер-группа с одним консьюмером c1 внутри. Значит, этот консьюмер будет получать сообщения из всех партиций топика.
Если мы добавим ещё одного консьюмера в группу, то партиции автоматически распределятся между ними, и c1 теперь будет читать сообщения из первой и второй партиции, а c2 — из третьей. Добавив ещё одного консьюмера (c3), мы добьёмся идеального распределения нагрузки, и каждый из консьюмеров в этой группе будет читать данные из одной партиции.
А вот если мы добавим в группу ещё одного консьюмера (c4), то он не будет задействован в обработке сообщений вообще.
Важно понять: внутри одной консьюмер-группы партиции назначаются консьюмерам уникально, чтобы избежать повторной обработки.
Если консьюмеры не справляются с текущим объёмом данных, то следует добавить новую партицию в топик. Только после этого консьюмер c4 начнёт свою работу.
Механизм партиционирования является нашим основным инструментом масштабирования Kafka. Группы являются инструментом отказоустойчивости.
Кстати, как вы думаете, что будет, если один из консьюмеров в группе упадёт? Совершенно верно: партиции автоматически распределятся между оставшимися консьюмерами в этой группе.
Добавлять партиции в Kafka можно на лету, без перезапуска клиентов или брокеров. Клиенты автоматически обнаружат новую партицию благодаря встроенному механизму обновления метаданных. Однако, нужно помнить две важные вещи:
И ещё неочевидный момент: если вы добавляете новую партицию на проде, то есть в тот момент, когда в топик пишут сообщения продюсеры, то важно помнить про настройку auto.offset.reset=earliest в консьюмере, иначе у вас есть шанс потерять или просто не обработать кусок данных, записавшихся в новую партицию до того, как консьюмеры обновили метаданные по топику и начали читать данные из этой партиции.
Помимо этого, механизм групп позволяет иметь несколько несвязанных между собой приложений, обрабатывающих сообщения.
Как мы обсуждали ранее, можно добавить новую группу консьюмеров к тому же самому топику, например, для обработки и статистики регистраций. Эти две группы будут читать одни и те же сообщения из топика тех самых ивентов регистраций — в своём темпе, со своей внутренней логикой.
А теперь, зная внутреннее устройство консьюмеров в Kafka, давайте вернёмся к изначальному вопросу: «Каким образом мы можем обозначить сообщения в партиции, как обработанные?».
Для этого Kafka предоставляет механизм консьюмер-офсетов. Как мы помним, каждое сообщение партиции имеет свой собственный, уникальный, монотонно возрастающий офсет. Именно этот офсет и используется консьюмерами для сохранения партиций.
Консьюмер делает специальный запрос к брокеру, так называемый offset-commit с указанием своей группы, идентификатора топик-партиции и, собственно, офсета, который должен быть отмечен как обработанный. Брокер сохраняет эту информацию в своём собственном специальном топике. При рестарте консьюмер запрашивает у сервера последний закоммиченный офсет для нужной топик-партиции, и просто продолжает чтение сообщений с этой позиции.
В примере консьюмер в группе email-service-group, читающий партицию p1 в топике registrations, успешно обработал три сообщения с офсетами 0, 1 и 2. Для сохранения позиций консьюмер делает запрос к брокеру, коммитя офсет 3. В случае рестарта консьюмер запросит свою последнюю закоммиченную позицию у брокера и получит в ответе 3. После чего начнёт читать данные с этого офсета.
Консьюмеры вольны коммитить совершенно любой офсет (валидный, который действительно существует в этой топик-партиции) и могут начинать читать данные с любого офсета, двигаясь вперёд и назад во времени, пропуская участки лога или обрабатывая их заново.
Ключевой для понимания факт: в момент времени может быть только один закоммиченный офсет для топик-партиции в консьюмер-группе. Иными словами, мы не можем закоммитить несколько офсетов для одной и той же топик-партиции, эмулируя каким-то образом выборочный acknowledgment (как это делалось в системах очередей).
Представим, что обработка сообщения с офсетом 1 завершилась с ошибкой. Однако мы продолжили выполнение нашей программы в консьюмере и запроцессили сообщение с офсетом 2 успешно. В таком случае перед нами будет стоять выбор: какой офсет закоммитить — 1 или 3. В настоящей системе мы бы рекомендовали закоммитить офсет 3, добавив при этом функционал, отправляющий ошибочное сообщение в отдельный топик для повторной обработки (ручной или автоматической). Подобные алгоритмы называются Dead letter queue.
Разумеется, консьюмеры, находящиеся в разных группах, могут иметь совершенно разные закоммиченные офсеты для одной и той же топик-партиции.
Apache ZooKeeper
В заключение нужно упомянуть об ещё одном важном компоненте кластера Kafka — Apache ZooKeeper.
ZooKeeper выполняет роль консистентного хранилища метаданных и распределённого сервиса логов. Именно он способен сказать, живы ли ваши брокеры, какой из брокеров является контроллером (то есть брокером, отвечающим за выбор лидеров партиций), и в каком состоянии находятся лидеры партиций и их реплики.
В случае падения брокера именно в ZooKeeper контроллером будет записана информация о новых лидерах партиций. Причём с версии 1.1.0 это будет сделано асинхронно, и это важно с точки зрения скорости восстановления кластера. Самый простой способ превратить данные в тыкву — потеря информации в ZooKeeper. Тогда понять, что и откуда нужно читать, будет очень сложно.
В настоящее время ведутся активные работы по избавлению Kafka от зависимости в виде ZooKeeper, но пока он всё ещё с нами (если интересно, посмотрите на Kafka improvement proposal 500, там подробно расписан план избавления от ZooKeeper).
Важно помнить, что ZooKeeper по факту является ещё одной распределённой системой хранения данных, за которой необходимо следить, поддерживать и обновлять по мере необходимости.
Традиционно ZooKeeper раскатывается отдельно от брокеров Kafka, чтобы разделить границы возможных отказов. Помните, что падение ZooKeeper — это практически падение всего кластера Kafka. К счастью, нагрузка на ZooKeeper при нормальной работе кластера минимальна. Клиенты Kafka никогда не коннектятся к ZooKeeper напрямую.