公司测试集群迁往腾讯云,安装完flume和kafka后使用api消费topic,在应用日志中打印出来的日志中文部分全部是???????,数据存储写入mysql数据库后中文也是乱码,针对这个问题进行调整修复:
1、kafka消费的格式问题
设置kafka序列化和反序列化格式
properties.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); properties.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
经测试和该配置无关【注:并不表示在使用kafka api时不用指定序列化格式】,应用日志中中文部分仍然时乱码!
2、mysql数据库默认编码问题【因为在应用日志中也是乱码,所以不太可能是这种情况】
查看mysql数据库的编码格式是否时中文或utf8
命令:show variables like 'character%'
结果:
红色部分的值可以看出编码格式没有错误!
3、服务器本身的默认编码格式问题
因为是新的云服务器,所以才有了这个猜想,在网上也看到了相关帖子
通过命令查看服务器的编码设置:locale
可以看出都是英文的utf-8,所以打算调整该设置,但没找到直接修改这个设置的方法或命令,只有通过修改 /etc/profile文件进行调整【root用户】
vim vim /etc/profile
在文件最后添加 :export LANG="zh_CN.UTF-8"
保存退出后执行命令:source /etc/profile 使配置生效,在运行服务后乱码现象不见了
还有一种方式修改,但只是临时的,当关闭会话后还是会出现乱码,所以不建议:
直接执行:export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
另外在网上查找时遇到一篇帖子是关于locale命令及设置的:https://www.cnblogs.com/regit/p/7837814.html
在排查时我使用命令行kafka producter 产生消息,并使用consumer查看发现都没有出现乱码的现象,所以就有了服务器编码格式非中文的猜测,测试并打印出来编码格式
println(Charset.defaultCharset())
结果在本地和服务器上的结果是不一样的
本地:
服务器: