Właśnie napisałem nowy temat, nie napisałem jeszcze żadnej wiadomości. Plik o nazwie "00000000000000000000.index" utworzony w katalogu "/ tmp/kafka-logs-1/topicname-0 /", a rozmiar tego pliku jest naprawdę duży. Otworzyłem ten plik binarny w vi, a jego zawartość to tylko "0000 0000 0000 0000 ..." Co to znaczy? co to jest plik indeksu?dlaczego plik .index istnieje w katalogu kafka-log?
Odpowiedz
Każdy segment dziennika (pliki * .log) jest to odpowiedni indeks (pliki * .Index) o tej samej nazwie, ponieważ stanowią one podstawę przesunięcie.
Dla zrozumienia, plik dziennika zawiera rzeczywiste wiadomości uporządkowane w formacie wiadomości. Dla każdej wiadomości w tym pliku pierwsze 64 bity opisują inkrementowane przesunięcie. Teraz wyszukiwanie tego pliku dla wiadomości z określonym przesunięciem staje się kosztowne, ponieważ pliki dzienników mogą rosnąć w zakresie gigabajtów. Aby móc generować komunikaty, broker musi wykonać takie wyszukiwania, aby określić ostatnie przesunięcie i móc dalej prawidłowo zwiększać przychodzące wiadomości.
Dlatego istnieje plik indeksu. Przede wszystkim struktura wewnątrz pliku indeksu wiadomości opisuje tylko 2 pola, każde z nich 32bit długa:
- 4 bajty: względne przesunięcie
- 4 bajty: Stanowisko fizyczny
Jak opisany wcześniej, nazwa pliku reprezentuje przesunięcie bazy. W przeciwieństwie do pliku dziennika, w którym przesunięcie jest zwiększane dla każdej wiadomości, wiadomości w plikach indeksowych zawierają względne przesunięcia względem przesunięcia bazowego. Drugie pole reprezentuje fizyczną pozycję powiązanego komunikatu dziennika (przesunięcie podstawowe + względne przesunięcie), a zatem możliwe staje się wyszukiwanie O (1).
Po tym wszystkim należy wspomnieć, że nie każda wiadomość w dzienniku ma odpowiednią wiadomość w indeksie. Parametr konfiguracyjny index.interval.bytes, który domyślnie wynosi 4096 bajtów, ustawia interwał indeksowania, który zasadniczo opisuje, jak często (po ilu bajtach) zostanie dodany wpis indeksu.
Odnosząc się do pytania o rozmiar pliku .index, można powiedzieć: Parametr konfiguracyjny segment.index.bytes, który domyślnie ma rozmiar 10 MB, opisuje rozmiar tego pliku. To miejsce zostanie ponownie przydzielone i zmniejszy się dopiero po zakończeniu dziennika.
Każdy plik dziennika ma odpowiedni plik indeksu, a jego przeznaczeniem jest tłumaczenie logicznych przesunięć komunikatów na fizyczne pozycje w pliku danych. widzianych here
EDIT:
Od doc
Każda partycja jest uporządkowana, niezmienna kolejność zapisów, które są stale dołączany do-a zorganizowany popełnić dziennik.
W Kafce partycje tematyczne nie mogą być podzielone na wiele brokerów. Teraz w sytuacjach, w których Kafka musi usunąć niektóre wiadomości z partycji po upływie okresu przechowywania, musi przeskanować pliki partycji. Ta operacja będzie bardzo powolna w przypadku istnienia pojedynczego dużego pliku partycji. Aby tego uniknąć, Kafka dzieli partycje na wiele segmentów.
Nowe pliki segmentów utworzone, gdy bieżący (nazywany aktywnym segmentem) osiągnął limit rozmiaru (kontrolowany przez właściwość log.segment.bytes
). Tak więc dla każdego segmentu znajduje się plik log
i plik index
. Teraz każdy segment rozpoczyna się od offsetu podstawowego, który jest większy niż przesunięcie w poprzednich segmentach.
Plik z pliku np.00000000005120942793.log
jest gdzie Kafka faktycznie przechowuje wiadomości wraz ze wszystkimi szczegółami jak offset (raz wiadomość jest wsuwany Kafka on nadawany jest niepowtarzalny numer sekwencyjny o nazwie Offset
.), Datownik, kompresja, ładowność itp
The plików indeksowych np 00000000005120942793.index
mapuje aktualne pozycje wiadomości w dzienniku. Zwykle składa się z dwóch części, z których każda ma 4 bajty. Pierwsza część przechowuje przesunięcie komunikatu (względem jego przesunięcia bazowego), a później przechowuje pozycję wiadomości. Pliki indeksu są odwzorowywane w pamięci, a Kafka używa wyszukiwania binarnego, aby zlokalizować najbliższe przesunięcie mniejsze lub równe przesunięciu docelowemu.
Źródło:
http://kafka.apache.org/documentation.html#brokerconfigs http://supergsego.com/apache/kafka/0.8.2.0/scaladoc/kafka/log/OffsetIndex.html https://thehoard.blog/how-kafkas-storage-internals-work-3a29b02e026
Skopiuj wklejony fragment z dokumentami i połączonym komentarzem. – cevaris
Prawdopodobnie przegapiłeś link podany przy odpowiedzi – user2720864
Nie, zobaczyłem link quora. Obie odpowiedzi nie odpowiadają skutecznie na pytanie OP. – cevaris
- 1. sprawdzanie, czy plik istnieje w określonym katalogu
- 2. Jak sprawdzić, czy plik istnieje w katalogu Dokumenty w Swift?
- 3. Pobierz najnowszy plik w katalogu
- 4. Utwórz plik w określonym katalogu
- 5. Dlaczego z-index nie działa?
- 6. Dlaczego z-index: -1; pojawiają się powyżej z-index: 1 ;?
- 7. Szyny: dlaczego jest plik .keep w każdym katalogu
- 8. Bz2 każdy plik w katalogu
- 9. znaleźć pierwszy plik w katalogu
- 10. Sprawdź, czy plik istnieje w ksh
- 11. Jak skopiować plik z katalogu do innego katalogu w Javie
- 12. Dlaczego nie zookeeper używać mojego katalogu plik dziennika log4j.properties
- 13. Dlaczego .meteor ma plik .gitignore?
- 14. Wypełnij ostatnio używany plik w bieżącym katalogu
- 15. Jak skopiować plik z jednego katalogu do innego katalogu, tworząc folder, jeśli ten folder nie istnieje
- 16. Dlaczego .index jest szybszy niż .all?
- 17. Skopiuj plik do innego katalogu
- 18. importować plik z innego katalogu
- 19. Załaduj plik z katalogu nadrzędnego
- 20. Jak utworzyć plik w podfolderze katalogu dokumentów?
- 21. Pobierz najnowszy plik w katalogu, Node.js
- 22. Przeczytaj plik .txt w katalogu dokumentów
- 23. Jak odróżnić plik z katalogu w Perlu?
- 24. Python: Importuj plik w katalogu dziadka
- 25. Pobierz plik w moim katalogu roboczym
- 26. Powtórz każdy plik w jednym katalogu
- 27. W tym plik nagłówkowy z innego katalogu
- 28. utworzyć plik w innym katalogu z php
- 29. Dekompresuj plik tar do katalogu
- 30. Importować plik z katalogu nadrzędnego?
Co masz na myśli mówiąc "ta przestrzeń jest ponownie przydzielona"? –
Zauważyłem, że istnieje plik z prefiksem * .timeindex *. Po co to jest ? –
Timeindex zapewnia szybki dostęp do każdej wiadomości na podstawie znacznika czasu zamiast wartości przesunięcia. Możesz nawet wyszukiwać offset za pomocą znaczników czasu, używając metody offsetsForTimes() –