Apache Kafka

Apache Kafka използва ключове за дял

Apache Kafka използва ключове за дял
Apache Kafka е платформа за поточно предаване на данни, отговорна за поточно предаване на данни от редица източници на много цели. Извикват се и източниците производители. Получените данни са необходими на съвсем друга група, наречена потребителите за различни цели. Kafka е слоят, който се намира между производителите и потребителите и обобщава данните в използваем тръбопровод. Също така Kafka сама по себе си е разпределена платформа, така че слоят Kafka е съставен от различни сървъри, работещи с kafka, тези сървъри или възли са известни като Kafka Брокери.

Този преглед е малко абстрактно, така че нека го обосновем в реален сценарий, представете си, че трябва да наблюдавате няколко уеб сървъра. Всеки работи със собствен уебсайт и във всеки един от тях се генерират постоянно нови дневници всяка секунда от деня. На всичкото отгоре има редица имейл сървъри, които също трябва да наблюдавате.

Може да се наложи да съхранявате тези данни за целите на воденето на записи и фактурирането, което е пакетна работа, която не изисква незабавно внимание. Може да искате да стартирате анализ на данните, за да вземате решения в реално време, което изисква точно и незабавно въвеждане на данни.  Изведнъж се озовавате в необходимостта от рационализиране на данните по разумен начин за всички различни нужди. Kafka действа като онзи слой абстракция, към който множество източници могат да публикуват различни потоци от данни и даден консуматор може да се абонира за потоците, които намира за подходящи. Kafka ще се погрижи данните да са добре подредени. Това е вътрешността на Кафка, която трябва да разберем, преди да стигнем до темата за разделяне и ключове.

Теми на Kafka, брокер и дялове

Кафка Теми са като таблици на база данни. Всяка тема се състои от данни от определен източник от определен тип. Например здравето на вашия клъстер може да бъде тема, състояща се от информация за използването на процесора и паметта. По същия начин входящият трафик към целия клъстер може да бъде друга тема.

Kafka е проектиран да бъде хоризонтално мащабируем. Това ще рече, че един-единствен екземпляр на Кафка се състои от множество Кафка брокери протичащи през множество възли, всеки може да обработва потоци от данни, успоредни на другия. Дори ако някои от възлите не успеят, вашият конвейер за данни може да продължи да функционира. След това определена тема може да бъде разделена на няколко дялове. Това разделяне е един от решаващите фактори зад хоризонталната мащабируемост на Kafka.

Многократни производители, източници на данни за дадена тема, могат да пишат в тази тема едновременно, тъй като всеки пише в различен дял, във всяка дадена точка. Сега обикновено данните се присвояват на дял на случаен принцип, освен ако не му предоставим ключ.

Разделяне и подреждане

За да обобщим, производителите пишат данни за дадена тема. Тази тема всъщност е разделена на множество дялове. И всеки дял живее независимо от останалите, дори за дадена тема. Това може да доведе до много объркване, когато подреждането на данни има значение. Може би се нуждаете от вашите данни в хронологичен ред, но наличието на множество дялове за вашия поток от данни не гарантира перфектно подреждане.

Можете да използвате само един дял на тема, но това поражда цялата цел на разпределената архитектура на Kafka. Затова се нуждаем от друго решение.

Клавиши за дялове

Данните от производител се изпращат на дялове произволно, както споменахме по-рано. Съобщенията са действителните парчета данни. Това, което производителите могат да направят освен да изпращат съобщения, е да добавят ключ, който се съчетава с него.

Всички съобщения, които идват с конкретния ключ, ще отидат в същия дял. Така например, активността на даден потребител може да се проследява хронологично, ако данните на този потребител са маркирани с ключ и така те винаги попадат в един дял. Нека наречем този дял p0 и потребителя u0.

Разделът p0 винаги ще приема съобщенията, свързани с u0, защото този ключ ги свързва заедно. Но това не означава, че p0 е свързано само с това. Той може също да приема съобщения от u1 и u2, ако има капацитета да го направи. По същия начин други дялове могат да консумират данни от други потребители.

Точката, че данните на даден потребител не се разпространяват в различен дял, осигурява хронологично подреждане за този потребител. Общата тема на потребителски данни, все още може да използва разпределената архитектура на Apache Kafka.

Заключение

Докато разпределените системи като Kafka решават някои по-стари проблеми като липса на мащабируемост или наличието на единична точка на отказ. Те идват с набор от проблеми, които са уникални за техния собствен дизайн. Предвиждането на тези проблеми е основна работа на всеки системен архитект. Не само това, понякога наистина трябва да направите анализ на разходите и ползите, за да определите дали новите проблеми са достоен компромис за отърване от по-старите. Поръчването и синхронизирането са само върхът на айсберга.

Надяваме се, че статии като тези и официалната документация могат да ви помогнат по пътя.

OpenTTD срещу Simutrans
Създаването на собствена транспортна симулация може да бъде забавно, релаксиращо и изключително примамливо. Ето защо трябва да сте сигурни, че изпробв...
Урок за OpenTTD
OpenTTD е една от най-популярните бизнес симулационни игри там. В тази игра трябва да създадете прекрасен транспортен бизнес. Въпреки това, ще започне...
SuperTuxKart за Linux
SuperTuxKart е страхотно заглавие, създадено да ви предостави безплатно изживяването на Mario Kart във вашата Linux система. Играта е доста предизвика...