이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 14467|회답: 1

Kafka 윈도우 시스템은 일정 시간 실행 후 끊깁니다

[링크 복사]
게시됨 2021. 7. 12. 오전 10:57:01 | | | |
1: 배경

저는 이전에 리눅스 환경에서 카프카를 사용했는데, 카프카 자체에는 문제가 없었습니다. 하지만 현재 작업 중인 프로젝트는 윈도우와 리눅스와 호환되어야 하는데, 윈도우 환경에서 카프카를 사용해 보니 카프카 자체가 리눅스만큼 윈도우와 호환되지 않는다는 것을 알게 되었습니다.

2: 문제

윈도우에서 카프카를 테스트할 때, 카프카가 실행된 후 일정 시간 동안 오류가 발생했습니다:

다른 프로그램이 파일을 사용하고 있는데, 프로세스가 접근할 수 없습니다.
다음 해결책들은 문제를 완전히 해결하지 않으며 권장되지 않습니다

Windows Kafka 오류 로그가 정리되지 않음__consumer_offsets
https://www.itsvse.com/thread-9980-1-1.html




[2021-07-06 09:06:10,800] 오류 IOException (kafka.server.LogDirFailureChannel) 때문에 __consumer_offsets-42 로그가 C:\tmp\kafka-logs 방향으로 정리되지 않음
java.nio.file.FileSystemException: C:\tmp\kafka-logs\__consumer_offsets-42\00000000000000000000.timeindex.cleaned ->
C:\tmp\kafka-logs\__consumer_offsets-42\00000000000000000000.timeindex.swap: 另一个程序正在使用此文件,进程无法访问。

        sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
        at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
        sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:387)
        at sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287)
        java.nio.file.Files.move(Files.java:1395)
        org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:904)
        kafka.log.AbstractIndex.renameTo(AbstractIndex.scala:210)
        at kafka.log.LazyIndex$IndexValue.renameTo(LazyIndex.scala:155)
        kafka.log.LazyIndex.$anonfun$renameTo$1(LazyIndex.scala:79)
        kafka.log.LazyIndex.renameTo(LazyIndex.scala:79)
        at kafka.log.LogSegment.changeFileSuffixes(LogSegment.scala:496)
        kafka.log.Log.$anonfun$replaceSegments$4(Log.scala:2402)
        at kafka.log.Log.$anonfun$replaceSegments$4$adapted(Log.scala:2402)
        scala.collection.immutable.List.foreach(List.scala:333)
        kafka.log.Log.replaceSegments(Log.scala:2402)
        kafka.log.Cleaner.cleanSegments(LogCleaner.scala:613)
        kafka.log.Cleaner.$anonfun$doClean$6(LogCleaner.scala:538)
        kafka.log.Cleaner.$anonfun$doClean$6$adapted(LogCleaner.scala:537)
        scala.collection.immutable.List.foreach(List.scala:333)
        kafka.log.Cleaner.doClean(LogCleaner.scala:537)
        kafka.log.Cleaner.clean(LogCleaner.scala:511)
        kafka.log.LogCleaner$CleanerThread.cleanLog(LogCleaner.scala:380)
        kafka.log.LogCleaner$CleanerThread.cleanFilthiestLog(LogCleaner.scala:352)
        kafka.log.LogCleaner$CleanerThread.tryCleanFilthiestLog(LogCleaner.scala:332)
        kafka.log.LogCleaner$CleanerThread.doWork(LogCleaner.scala:321)
        kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:96)
        억제됨: java.nio.file.FileSystemException: C:\tmp\kafka-logs\__consumer_offsets-42\0000000000000000000000.timeindex.cleaned -> C:\tmp\kafka-logs\__consumer_offsets-42\ 0000000000000000000000000000.timeindex.swap: 다른 프로그램이 이 파일을 사용하고 있는데, 이 과정에 접근할 수 없습니다.

                sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
                at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
                sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:301)
                at sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287)
                java.nio.file.Files.move(Files.java:1395)
                org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:901)
                ... 20개 더

3: 원인

Kafka 로그 정리 정책은 Windows 환경에서 정리가 필요한 로그를 열 때 파일 이름을 변경할 수 없게 만들어 Kafka가 크래시를 일으킵니다.

인터넷에서 가장 흔한 해결책은 "kafka의 로그 파일을 비우고 kafka를 재시작하는 것"인데, 이는 운영 환경에서는 비현실적입니다. 그래서 처음에 저는 이 상황에 대해 다음과 같은 두 가지 해결책을 생각해냈습니다:

해결책 1: 로그 정리 정책을 수정하여 로그 정리 시간을 무한대(-1)로 변경하여 kafka 데이터 로그를 영구적으로 저장하세요
단점: (1) 디스크 공간이 계속 증가할 것입니다
옵션 2: Windows에서 가상 머신을 구축하세요(docker도 비슷하지만 더 까다롭습니다). 그리고 그 가상 머신에 Kafka를 배포합니다
단점: (1) 운영 및 관리 담당자가 일부 리눅스 운영 및 관리 지식을 알아야 함 (2) 메모리 사용량 증가

당연히 두 가지 선택지의 단점이 저에게는 견딜 수 없을 정도였기에, 저는 카프카 커뮤니티에 도움을 요청했습니다.

신 숭배에 관한 토론은 여기를 클릭하세요:하이퍼링크 로그인이 보입니다.

창문 아래 카프카 문제는 생각만큼 쉽지 않다는 것이 이해된다.아직 공식적인 해결책은 없습니다。 즉, (창문 아래에서 카프카를 사용하지 마세요! )

해결책 3: 그럼에도 불구하고 창문 아래에서 카프카를 사용해야 할 필요성은 여전히 존재하므로, 여전히 많은 신들이 주목하며 해결책을 제안하고 있습니다. 위대한 신 중 한 명이 이 문제에 대한 카프카 소스 코드를 개발했습니다. 테스트 후, 그의 해결책은 윈도우 아래에서 문제를 해결해 카프카를 윈도우에서 사용할 수 있게 했습니다. 하지만 이 해결책에 대해 카프카의 기여자는 안전하지 않을 수 있다고 말했습니다(즉, 패치가 공식 버전에 통합될 수 없다는 뜻입니다).

4: 해결하기 (컴파일된 카프카 패키지 다운로드 링크가 끝에 있습니다)
카프카 관계자들은 패치가 안전하지 않다고 말하지만, 지금까지 아무런 조치도 취하지 않았습니다. 수요도 존재하니, 고민 끝에 저는 여전히 옵션 3의 방법을 사용해 문제를 완전히 해결할 계획입니다. 그래서 패치를 넣고 카프카를 다시 컴파일할 예정입니다.

4.1: 카프카 패치 버전 다운로드

이 작가의 카프카 패치 버전을 다운로드하세요

하이퍼링크 로그인이 보입니다.

4.2: 카프카 패치 버전 컴파일하기
Kafka 컴파일은 gradle을 통해 이루어지므로, 먼저 gradle 구성을 해야 합니다

gradle 설정 방법에 대해서는 이 기사를 참고하시면 됩니다(재인쇄됨, 침해는 삭제됩니다). Windows에서 gradle 설치 및 설정:하이퍼링크 로그인이 보입니다.

Kafka를 컴파일하는 방법에 대한 정보는 github를 참고할 수 있습니다------ Gradle을 이용한 Kafka 컴파일:하이퍼링크 로그인이 보입니다.

컴파일 후에는 Windows에서 사용할 수 있는 Kafka 패키지를 얻을 수 있습니다.

"복사-붙여넣기" 개념에 맞게(결국 소스 코드 컴파일은 여전히 꽤 시간이 많이 걸리니까요), 제가 컴파일한 카프카 패키지의 다운로드 링크가 여기 있습니다. 직접 다운로드해서 사용할 수 있습니다.

kafka_2.12-2.3.0_window 다운타임 방지 버전 다운로드 주소:

하이퍼링크 로그인이 보입니다.

원본 링크:하이퍼링크 로그인이 보입니다.







이전의:MySQL은 데이터베이스 테이블의 주석을 쿼리합니다
다음:SQL 서버 파티션 테이블 요약
게시됨 2021. 7. 12. 오후 9:16:33 |
아직 플레이하지 않은 포럼 보스는 매우 존경받는 인물입니다
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com