• Java 中文字符按Unicode排序

    遇到了一个对包含中文的字符串进行排序的问题。要求按unicode编码对字符串进行排序。 测试字符串数组如下: 按unicode排序的期望结果应该是这样的: 先按java.lang.String类提供的默认比较方案进行实现,大致如下: 结果如下: 可以看到中文字符不能按照拼音进行排序。这时最直接的思路就是将中文字符转为拼音后再进行排序。但是要注意下,在这里面有个字符串不包含中文字符,这就容易导致顺序混乱。 如下面这几个字符串按拼音进行排序顺序如下: 可以看到字符串“1-qt”的位置出错了。 但是按拼音来说它的位置又是对的。这不能不说是一个让人有些头疼的地方。 不过不用担心,java提供了java.text.Collator类来支持规范化的字符串比较。 使用Collator来改造之前的代码: 改造后的程序执行排序的结果如下: 结果看着好像还OK。但是停停、注意下、字符串“1结束”的位置好像比较奇妙,理想情况下它应该在“1-营销”的后面。 这里出问题的原因我没有弄清楚。猜测着应该是java在Chinese语法中将中划线处理为空字符了。不过最根本的问题还是java对Unicode Collation Algorithm(UCA,Unicode整理算法)的支持并不好。 此时可以考虑使用IBM ICU提供的Collator来替换jdk默认的Collator。代码如下: 相关的依赖为: 执行结果为: 可以看到是和预期一致的。 参考文档 Java Unicode strings sorting ICU User Guide – JNI ##########

    [阅读更多...]
  • Kafka报错:Error reading field ‘topics’

    在kafka的server.log中发现了如下报错信息: 在StackOverflow上找到了类似的问题。知道报这个错的是因为kafka服务端的版本和kafka客户端的版本不一致导致的。 解决方案很简单: 调整kafka server端版本; 调整kafka客户端版本。 #######

    [阅读更多...]
  • Kafka警告:No checkpointed highwatermark is found for partition

    测试环境使用的Kafka出现了点儿问题,服务器被停止,所有的topic日志不知怎的被清空。一番大清洗(清理zookeeper节点、kafka topic log)、重启Kafka、创建分区后发现报了如下的错误: 找了些资料知道了报警的原因。 日志中提到的high watermark指的是一个partition中上一次提交的消息的offset。报警是因为topic刚创建、消费已开始、但是还没有生产者推送消息过来、对应topic没有任何offset的记录导致的。 所以该警告可以忽略,待有消息推送过来即可。 相关资料 Intra-cluster Replication in Apache Kafka #####

    [阅读更多...]
  • Kafka报错:connection reset by peer

    在kafka的server.log中发现持续爆出如下错误信息: 查了下原因,是因为kafka的客户端异常关闭,而Kafka仍在向其推送数据导致的。 没有找到太好的解决办法。最后使用了一个笨方法:先停掉所有的生产者和消费者服务,再停掉Kafka;而后重启Kafka、重启停掉的服务。这样异常就消失了。 后来又发现这个异常断续出现了几次,因为是测试环境,懒得去管它,神奇的是居然最后也自动恢复了。 ######

    [阅读更多...]
  • 解决PKIX:unable to find valid certification path to requested target

    遇到了“unable to find valid certification path to requested target”这样的问题。 错误详情如下: 从异常信息中可以看到错误是因为找不到证书导致的。 解决方案有两个。 正常的方案当然是找到证书并安装证书。这种方案能找到一大把,在这里不做展开。 说个暴力的方案:取消证书认证,信任所有请求链接。 使用的工具是fluent-http-client,maven地址是: 首先创建一个自定义的HttpClient实例。这个实例将信任所有的请求链接。实例详情如下: 注意代码中的两处注释,是关键。 然后绑定新创建的实例,执行一个Get请求:就这样。 #######

    [阅读更多...]