Много често, когато разработчиците идват при мен с молба да внедря нова употреба на Kafka, те вярват, че Kafka може незабавно да реши всички проблеми. Въпреки че наистина е отличен проект, той може също да бъде донякъде опростен до проста абстракция на „масив от отдалечен запис“ с няколко обогатявания (висока производителност, потребителски групи, уплътняване, множество интеграции и т.н.).

Въпреки това в долната част дялът на Kafka може просто да се третира така, както е - отдалечен байтов масив, позволяващ операции за запис само за добавяне за производителите и произволен достъп за потребителите.

И така, малко по-леко, ако Kafka може да се третира като масив от байтове - тогава ще бъде ли възможно да се използва в типични сценарии за компютърни науки, като двоично търсене? Оказва се, че е много възможно, ако създадем дял със сортирани данни и след това използваме потребител за достъп до array[i].

В горния прост пример, ние основно прилагаме нашето собствено двоично търсене и създаваме anarrayAccess метод, за да предоставим нашето поддържано от Kafka изпълнение на array[i].

В този случай обаче трябваше да внедрим собствено двоично търсене, докато вместо това можехме да използваме Collections.binarySearch. За да направим това, ще трябва да създадем „забавен“ клас KafkaBackedArray, който ще имплементира get метода на List с потребител — като останалата част от API ще ни бъде дадена почти безплатно.

В крайна сметка работи, както се очаква, двоичното търсене извършва достъпите, което се превежда в извиквания на Kafka poll.

Внимателните читатели ще забележат, че съм конфигурирал потребителя да използва max.poll.records=1, тъй като не исках да събирам данни само за да бъдат изхвърлени. Нашата реализация на KafkaBackedArray може да бъде направена малко по-интелигентна и да използва някакъв вътрешен кеш на вече получени записи, спестявайки латентност и мрежов I/O.