阿里云盾提醒的安全问题

yum update kernel
yum update kernel-devel
yum update kernel-headers
yum update kernel-tools
yum update kernel-tools-libs
yum update python-perf

升级 kernal 之前还解决了我的虚拟网络问题,从 3.10.327 升到 3.10.514

Oracle jdbc 连接,特别慢的问题。

遇到一个奇怪的问题,第一次连接 oracle 的时候,很快,第二次开始,就非常慢了,而且,过段时间就快,很随机。

跟踪 stacktrace 发现,每次 oracle logon 的时候,会使用 /dev/random 来生成随机数,在 centos 下,这个 device 很慢。所以考虑换成伪随机数 /dev/urandom。

可以使用 sudo rngd -b -o /dev/random -r /dev/urandom 替换掉。

也可以配置 java
1. 修改 $JAVA_HOME/jre/lib/security/java.security,将 securerandom.source=file:/dev/random 修改为 securerandom.source=file:/dev/urandom
2. 设置 -Djava.security.egd=file:/dev/urandom 或 -Djava.security.egd=file:/dev/./urandom

mysql sql_mode

mysql innodb 的 index 有一定的长度要求,所以创建 index 的时候,经常会有发生超长的错误,但这个错误也是和 mysql 的 sql mode 有关系的,比如,把 sql_mode 设置成 ONLY_FULL_GROUP_BY,那么 index 会创建成功,但长度被截取 7xx 位,而不是像平时那样,直接报错。

sql_mode常用值
ONLY_FULL_GROUP_BY:
对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中

NO_AUTO_VALUE_ON_ZERO:
该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户 希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。

STRICT_TRANS_TABLES:
在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制

NO_ZERO_IN_DATE:
在严格模式下,不允许日期和月份为零

NO_ZERO_DATE:
设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。

ERROR_FOR_DIVISION_BY_ZERO:
在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如 果未给出该模式,那么数据被零除时MySQL返回NULL

NO_AUTO_CREATE_USER:
禁止GRANT创建密码为空的用户

NO_ENGINE_SUBSTITUTION:
如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常

PIPES_AS_CONCAT:
将”||”视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似
ANSI_QUOTES:
启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符

ORACLE的sql_mode设置等同:PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER.

Kafka 基本的使用和生产环境集群配置,包括 0.10 的 Java API 使用

最近用 Kafka 和外部系统进行数据交换,性能还是比较喜人的,问题也遇到一些。

Kafka 是什么网上有很多文章介绍,就不重复了。Kafka 是用 Scala 编写的,经过尝试 Kafka 的性能令人满意,但到现在,我还是有一些疑问的。
在某些场景下,我希望单条记录 commit,感觉就有些不适合了。
Topic 的历史的数据在什么情况下会删除,也不太清楚。

这次遇到了几个问题。

1. Java API 的使用,Kafka Doc 上关于 Java API 的使用一笔带过,没想到具体的使用方法文档,在 Kafka 的 Java Doc 上面,直接看就行了。
2. listeners 一定要写上 host 或 ip,否则本地用得挺好,远程的 producer 和 consumer 就不能用了。
3. 关于 zookeeper 的,最好用 Kafka 自己带的版本,比如带的是 3.4.6,用 3.4.8 的,Kafka 都连不上。

用的时候,务必先创建好 Topic,比如设置好的 partitions 和 replication-factor,一旦连上又有不停的消息进入,就没办法改了,只能停掉 producer 和 consumer 才能改。