java 버전 변경 (Linux Centos 7)
1. 자바 버전을 변경하게 된 계기
자바 8 기반으로 돌아가고 있는 카프카 클러스터에 대해
google cloud storage source connector를 기동시키자 다음과 같은 에러를 만났다.
ERROR [Worker clientId=connect-1, groupId=connect-cluster] Failed to start connector 'GCSSourceConnector' (org.apache.kafka.connect.runtime.distributed.DistributedHerder:1356)
org.apache.kafka.connect.errors.ConnectException: Failed to start connector: GCSSourceConnector
at org.apache.kafka.connect.runtime.distributed.DistributedHerder.lambda$startConnector$20(DistributedHerder.java:1327)
at org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:335)
at org.apache.kafka.connect.runtime.WorkerConnector.doRun(WorkerConnector.java:141)
at org.apache.kafka.connect.runtime.WorkerConnector.run(WorkerConnector.java:118)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.kafka.connect.errors.ConnectException: Failed to transition connector GCSSourceConnector to state STARTED
... 8 more
Caused by: java.lang.NoSuchMethodError: java.nio.ByteBuffer.position(I)Ljava/nio/ByteBuffer;
at com.google.protobuf.CodedOutputStream$HeapNioEncoder.flush(CodedOutputStream.java:1546)
at io.confluent.serializers.ProtoSerde.serializeUntyped(ProtoSerde.java:63)
at io.confluent.serializers.ProtoSerde.serialize(ProtoSerde.java:46)
at io.confluent.serializers.ProtoSerde.serialize(ProtoSerde.java:51)
at io.confluent.serializers.ProtoSerde.serialize(ProtoSerde.java:24)
at org.apache.kafka.common.serialization.Serializer.serialize(Serializer.java:62)
at org.apache.kafka.clients.producer.KafkaProducer.doSend(KafkaProducer.java:917)
at org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:885)
at org.apache.kafka.connect.util.KafkaBasedLog.send(KafkaBasedLog.java:323)
at io.confluent.license.LicenseStore.registerLicense(LicenseStore.java:284)
at io.confluent.license.LicenseStore.registerLicense(LicenseStore.java:277)
at io.confluent.license.LicenseManager.registerOrValidateLicense(LicenseManager.java:390)
at io.confluent.connect.utils.licensing.ConnectLicenseManager.registerOrValidateLicense(ConnectLicenseManager.java:257)
at io.confluent.connect.cloud.storage.source.StorageSourceConnector.doStart(StorageSourceConnector.java:75)
at io.confluent.connect.cloud.storage.source.StorageSourceConnector.start(StorageSourceConnector.java:69)
at org.apache.kafka.connect.runtime.WorkerConnector.doStart(WorkerConnector.java:185)
at org.apache.kafka.connect.runtime.WorkerConnector.start(WorkerConnector.java:210)
at org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:349)
at org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:332)
... 7 more
해당 로그에 관련된 글들을 찾아보니,
요약하자면, 자바 8과 달리 자바 11에서
ByteBuffer 클래스의 몇 가지의 method(flip(), clear()) 에 대해 새로운 overriden 메서드가 생기면서 발생한 로그이다.
자바 8에서는 ByteBuffer 클래스의 flip()메서드를 호출할 때 해당 메서드에 대해 implementation을 가지고 있지 않기 때문에
extended 클래스(Buffer)로부터 호출하며 Buffer 객체를 반환하게 된다.
그런데 자바 11에서는 ByteBuffer클래스가 flip() 메서드를 implement하고 있기 때문에 반환 객체는 Buffer 객체에서 ByteBuffer객체로 변환된다.
2. 자바 변경
다운로드 가능한 java 버전 확인하기 :
yum list java*jdk-devel
java 11 설치하기:
yum install java-11-openjdk-devel.x86_64
java 및 javac 기본 경로 변경하기: (미리 사용하고 있던 자바가 있는 경우)
update-alternatives --config java
update-alternatives --config javac
3. 카프카 브로커 기동 스크립트에서 JAVA_HOME 변경
내가 사용 중인 카프카 브로커 기동 스크립트에서 따로 JAVA_HOME을 명시해주고 있기 때문에
2번과 같이 자바를 변경해도 기존의 스크립트를 변경하지 않는다면 JVM 8 위에서 브로커가 기동된다.
아래와 같이 11 버전의 자바에서 기동 될 수 있도록 ${JAVA_HOME}을 변경한다.
### java home
#export JAVA_HOME="/usr/lib/jvm/java-1.8.0"
export JAVA_HOME="/usr/lib/jvm/java-11"
'자기발전소 > # Linux' 카테고리의 다른 글
[Linux] Free / Available of 'free' command (0) | 2023.11.02 |
---|---|
[Linux] ssh key 기반 인증 (0) | 2021.02.21 |
[Linux] 디스크 관리하기 (1) | 2021.01.26 |
Windows Subsystem for Linux(Windows 10) 설치 기록 (0) | 2021.01.05 |
리눅스 아카이빙 (0) | 2021.01.03 |