Kafka2.1.1使用snappy压缩的问题

Kafka2.1.1使用snappy压缩的问题

问题现象

服务端安装的kafka版本是2.1.1,当生产者配置了compression.type=snappy时,发送数据会失败,服务端如下抛出异常:

[2019-09-19 09:23:20,869] ERROR [ReplicaManager broker=0] Error processing append operation on partition test-produce-2 (kafka.server.ReplicaManager)
java.lang.UnsatisfiedLinkError: /tmp/snappy-1.1.7-a9582661-ddd7-45ff-8fef-862644d0ed2e-libsnappyjava.so: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /tmp/snappy-1.1.7-a9582661-ddd7-45ff-8fef-862644d0ed2e-libsnappyjava.so) (Possible cause: architecture word width mismatch)
	at java.lang.ClassLoader$NativeLibrary.load(Native Method)
	at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1824)
	at java.lang.Runtime.load0(Runtime.java:809)
	at java.lang.System.load(System.java:1086)
	at org.xerial.snappy.SnappyLoader.loadNativeLibrary(SnappyLoader.java:179)
...
[2019-09-19 09:23:20,892] ERROR [ReplicaManager broker=0] Error processing append operation on partition test-produce-2 (kafka.server.ReplicaManager)
java.lang.NoClassDefFoundError: Could not initialize class org.xerial.snappy.Snappy
	at org.xerial.snappy.SnappyInputStream.hasNextChunk(SnappyInputStream.java:435)
	at org.xerial.snappy.SnappyInputStream.read(SnappyInputStream.java:167)

解决办法

根据上述日志显示,version `GLIBCXX_3.4.21’ not found,于是在服务器上执行strings /usr/lib64/libstdc++.so.6 | grep GLIBC,显示如下:

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBC_2.17
GLIBCXX_DEBUG_MESSAGE_LENGTH

于是采用升级GCC:

  1. 下载gcc-5.2.0源码
    http://ftp.gnu.org/gnu/gcc/gcc-5.2.0/gcc-5.2.0.tar.gz

  2. 解压
    tar –xf gcc-5.2.0.tar.gz

  3. 安装依赖
    cd gcc-5.2.0
    ./contrib/download_prerequisites (下载依赖包 gmp、mpfr、mpc)
    利用下载源安装gcc、m4、g++
    yum install gcc g++ m4
    如果网络原因服务器不能下载,可以手动下载:
    https://gcc.gnu.org/pub/gcc/infrastructure/mpfr-2.4.2.tar.bz2
    https://gcc.gnu.org/pub/gcc/infrastructure/gmp-4.3.2.tar.bz2
    https://gcc.gnu.org/pub/gcc/infrastructure/mpc-0.8.1.tar.bz2
    然后解压再硬链,可参照./contrib/download_prerequisites脚本
    tar xjf $MPFR.tar.bz2
    ln -sf $MPFR mpfr

  4. 安装gcc-5.2.0
    ./configure --prefix=/usr/local/gcc-5.2.0 --enable-languages=c,c++,fortran --disable-multilib --with-build-config=bootstrap-debug
    make -j20(启用20个进程一起编译)
    make -j20 install

  5. 硬链
    cp /gcc-5.2.0/lib64/libstdc++.so.6.0.21 /usr/lib64/
    rm -f /usr/lib64/libstdc++.so.6
    ln -s /usr/lib64/libstdc++.so.6.0.21 /usr/lib64/libstdc++.so.6

这样Snappy加载不到的问题就解决了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值