2014-01-27 10 views
2

내 Java 웹 앱에서 메시지를 kafka으로 보내고 있습니다.UnsatisfiedLinkError kafka에 압축 된 (snappy) 메시지를 보낼 때

내가 너무 내 생산 속성에서 설정하고있어 보내기 전에 내 메시지를 압축하고 싶은

:

props.put를 ("compression.codec", "2");

내가 알고있는 것처럼

는 "2"물어을 의미하지만, 메시지를 보낼 때 나는군요 :

<dependency> 
     <groupId>org.xerial.snappy</groupId> 
     <artifactId>snappy-java</artifactId> 
     <version>${snappy-version}</version> 
     <scope>provided</scope> 
    </dependency> 

: 내 치어에 물어 의존성을 추가하는 시도

java.lang.UnsatisfiedLinkError: org.xerial.snappy.SnappyNative.maxCompressedLength(I)I 
     at org.xerial.snappy.SnappyNative.maxCompressedLength(Native Method) 
     at org.xerial.snappy.Snappy.maxCompressedLength(Snappy.java:316) 
     at org.xerial.snappy.SnappyOutputStream.<init>(SnappyOutputStream.java:79) 
     at org.xerial.snappy.SnappyOutputStream.<init>(SnappyOutputStream.java:66) 
     at kafka.message.SnappyCompression.<init>(CompressionUtils.scala:61) 
     at kafka.message.CompressionFactory$.apply(CompressionUtils.scala:82) 
     at kafka.message.CompressionUtils$.compress(CompressionUtils.scala:109) 
     at kafka.message.MessageSet$.createByteBuffer(MessageSet.scala:71) 
     at kafka.message.ByteBufferMessageSet.<init>(ByteBufferMessageSet.scala:44) 
     at kafka.producer.async.DefaultEventHandler$$anonfun$3.apply(DefaultEventHandler.scala:94) 
     at kafka.producer.async.DefaultEventHandler$$anonfun$3.apply(DefaultEventHandler.scala:82) 
     at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:233) 
     at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:233) 
     at scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:95) 
     at scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:95) 
     at scala.collection.Iterator$class.foreach(Iterator.scala:772) 
     at scala.collection.mutable.HashTable$$anon$1.foreach(HashTable.scala:157) 
     at scala.collection.mutable.HashTable$class.foreachEntry(HashTable.scala:190) 
     at scala.collection.mutable.HashMap.foreachEntry(HashMap.scala:45) 
     at scala.collection.mutable.HashMap.foreach(HashMap.scala:95) 
     at scala.collection.TraversableLike$class.map(TraversableLike.scala:233) 
     at scala.collection.mutable.HashMap.map(HashMap.scala:45) 
     at kafka.producer.async.DefaultEventHandler.serialize(DefaultEventHandler.scala:82) 
     at kafka.producer.async.DefaultEventHandler.handle(DefaultEventHandler.scala:44) 
     at kafka.producer.async.ProducerSendThread.tryToHandle(ProducerSendThread.scala:116) 
     at kafka.producer.async.ProducerSendThread$$anonfun$processEvents$3.apply(ProducerSendThread.scala:95) 
     at kafka.producer.async.ProducerSendThread$$anonfun$processEvents$3.apply(ProducerSendThread.scala:71) 
     at scala.collection.immutable.Stream.foreach(Stream.scala:526) 
     at kafka.producer.async.ProducerSendThread.processEvents(ProducerSendThread.scala:70) 
     at kafka.producer.async.ProducerSendThread.run(ProducerSendThread.scala:41) 

이 문제를 해결하려면/lib/ext 아래에있는 내 부두 서버에 병을 추가하십시오.이 오류는 계속 발생합니다. .

"compression.codec"속성에서 "2"대신 "0"을 설정하면 예외가 발생하지 않습니다.

멋진 압축을 사용하려면 어떻게해야합니까?

이 내 물어 버전 (나는 다른 하나를 사용해야합니까?)입니다 : 나는 우분투 12.10에서 실행 부두 8.1.9에 내 응용 프로그램을 배포하고 있습니다 1.1.0.1

.

+0

Snappy가 기본 라이브러리를로드 할 수 없기 때문에 오류가 발생합니다. 어떤 OS 및 스냅 샷 버전을 사용하고 있습니까? 이 @Wildfire – Wildfire

+0

내 물어 버전 (? 내가 다른 하나를 사용해야합니다)입니다 : \t \t <이따위 버전> 1.1.0.1 나는 실행 부두 8.1.9에 내 응용 프로그램을 배포하고 있습니다 우분투 12.10에서. – forhas

답변

1
<dependency> 
     <groupId>org.xerial.snappy</groupId> 
     <artifactId>snappy-java</artifactId> 
     <version>1.1.1.3</version> 
    </dependency> 

동일한 문제가 있으며 위의 코드가 내 문제를 해결했습니다. jar에는 모든 OS 용 기본 라이브러리가 들어 있습니다. 아래는 내 개발 환경입니다.

JDK version:  1.7.0_76 
Kafka version:  2.10-0.8.2.1 
Zookeeper version: 3.4.6