关键字:ssh、客户端、命令、端口、非22
时间:2017年8月

命令

root@debian:~# ssh john@192.168.1.100:12345     # 错误
root@debian:~# ssh -p 12345 john@192.168.1.100  # 正确

关键字:linux、远程桌面、xrdp、vnc
时间:2017年8月

环境

Debian 9,并安装有桌面环境。

安装

root@debian:~# apt-get install xrdp tightvncserver
...
root@debian:~# systemctl status xrdp
...
   Active: active(running) since ...
...

客户端

1、Windows系统,打开远程桌面(Win+R输入mstsc回车);
2、输入IP,点击链接;
3、Session选择Xorg,输入用户名和密码,点击OK。

关键字:java、命令行、参数解析、commandlineparser
时间:2017年8月

Maven

<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.4</version>

代码

CommandLineParser parser = new DefaultParser();
Options options = new Options();

options.addOption("h", "help", false, "Print usages.");
// h,短参数名,-h
// help,长参数名,--help
// false,不需要参数值
// Print usages, 参数描述

options.addOption("l", "listen", true, "Address to be listen. Example: 192.168.1.100:8888");
// true,需要参数值

options.addOption("", "zookeeper", true, "zookeeper address to be connected.");
// 只能用长参数

CommandLine cl;
try {
	cl = parser.parse(options, args);
        if (cl.hasOption('h')) {
        	System.out.println("h");;
        }
        if (cl.hasOption("listen")) {
        	System.out.println(cl.getOptionValue("listen"));
        }
} catch (ParseException e) {
	e.printStackTrace();
}

关键字:hbase、单机版、安装、开发环境
时间:2017年8月

环境

Debian 8.x

步骤

root@debian:~# apt-get install openjdk-8-jdk
root@debian:~# wget http://apache.fayea.com/hbase/1.2.6/hbase-1.2.6-bin.tar.gz
root@debian:~# tar -zxvf hbase-1.2.6-bin.tar.gz
...
root@debian:~# cd hbase-1.2.6
root@debian:~/hbase-1.2.6# vim conf/hbase-env.sh
...
# export JAVA_HOME=/usr/java/jdk1.6.0/
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
...
root@debian:~/hbase-1.2.6# bin/start-hbase.sh
...

使用

root@debian:~/hbase-1.2.6# bin/hbase shell
hbase(main):001:0>

关键字:kafka、exception、kafka.network.Processor
时间:2017年8月

错误信息

Processor got uncaught exception: kafka.network.Processor
...

原因分析

仔细查看错误日志发现有host相关字样,才回想起,这台主机修改了/etc/hostname,并且已经重启。但新的hostname在/etc/hosts里面并没有,如下:

#/etc/hostname
kafka
#/etc/hosts
127.0.0.1    localhost
127.0.1.1    debian
...

修改debian为kafka,启动kafka-server-start.sh,一切正常。

关键字:golang、redis、客户端、client
时间:2017年8月

前言

未找到redis官方提供的golang版客户端,但在第三方提供的客户端中发现了redigo,它是目前主流客户端之一。

代码

package main

import (
	"github.com/garyburd/redigo/redis"
	"fmt"
)

func main() {
	
	c, err := redis.Dial("tcp", "192.168.1.10:6379")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer c.Close()

	reply, err := c.Do("SET", "abc", "123456")
	fmt.Printf("reply: %v\n", reply)

	value, err := redis.String(c.Do("GET", "abc"))
	fmt.Printf("key: abc, value: %s\n", value)
}

关键字:golang、包、推荐、第三方
时间:2018年8月

包名 用途 特点 github地址
gorm ORM框架 github.com/jinzhu/gorm
sarama kafka客户端 github.com/Shopify/sarama
glog 日志库 google开发,无文件自动分割和滚动功能。 github.com/golang/glog
redigo redis客户端 与命令行使用方法相似。 github.com/gomodule/redigo
go-redis redis客户端 github.com/go-redis/redis
go-zookeeper zookeeper客户端 github.com/samuel/go-zookeeper/zk
go-sqlite3 sqlite3库 github.com/mattn/go-sqlite3
goquery html解析 github.com/PuerkitoBio/goquery

时间:2017年7月
关键字:kafka、poll、阻塞、挂起

版本

服务端:kafka_2.12-0.11.0.0.tgz
客户端:kafka-clients-0.11.0.0.jar

服务端

1、解压kafka_2.12-0.11.0.0.tgz;
2、进入kafka_2.12-0.11.0.0目录;
3、不修改server.properties,直接执行“bin/kafka-server-start.sh config/server.properties”启动;
4、通过kafka-console-producer.sh和kafka-console-consumer.sh测试,能够正常生产和消费。

客户端

代码

Properties props = new Properties();
props.put("bootstrap.servers", "192.168.1.10:9092");
props.put("group.id", "test");
props.put("enable.auto.commit", "true");
props.put("auto.commit.interval.ms", "1000");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
Collection topics = new HashSet();
topics.add("test");
consumer.subscribe(topics);
while (true) {
    System.out.println(".");
    ConsumerRecords<String, String> records = consumer.poll(100);
    for (ConsumerRecord<String, String> record : records)
        System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
}

问题

程序执行到ConsumerRecords<String, String> records = consumer.poll(100)就卡住了。

解决办法

> vim server.properties
...
#listeners=PLAINTEXT://:9092
listeners=PLAINTEXT://192.168.1.10:9092
..

问题分析

1、服务端启动时,把配置文件中的listeners写入zookeeper,默认是localhost,相当于zookeeper中记录的是id为0的broker监听地址为localhost;
2、客户端配置的是”bootstrap.servers”,启动后先访问bootstrap.servers,获取zookeeper地址;
3、客户端链接到zookeeper,通过zookeeper获取broker信息;
4、客户端拿到的broker地址是localhost;
5、客户端在localhost上poll()
注:consumer.listTopics()是直接访问的broker,能正常拿到所有topic。

时间:2017年8月
关键字:kafka、安装、报错、java、版本

错误信息

如果出现如下错误,更换kafka版本即可解决。

Exception in thread "main" java.lang.UnsupportedClassVersionError: kafka/Kafka : Unsupported major.minor version 52.0

版本搭配

kafka版本 openjdk-7 openjdk-8
kafka_2.11-0.10.2.1.tgz 正常启动 正常启动
kafka_2.12-0.10.2.1.tgz 报错 正常启动
kafka_2.11-0.11.0.0.tgz 正常启动 正常启动
kafka_2.12-0.11.0.0.tgz 报错 正常启动