1. 下载安装JDK。本文使用的是jdk-7u4-linux-i586.tar.gz。
2. 下载apache-maven-3.0.4-bin.tar.gz,解压到目标文件夹:
root@ubuntu:/usr/local# tar zvxf apache-maven-3.0.4-bin.tar.gz
设置环境变量:
root@ubuntu:~# vim /etc/profile
在文件最后加入:export PATH=/usr/local/apache-maven-3.0.4/bin:$PATH。
运行mvn –version,出现版本信息,既安装成功。
3. 下载安装eclipse。本文使用的eclipse-jee-indigo-SR2-linux-gtk.tar。
4. 下载安装eclipse maven插件,URL在线安装:http://m2eclipse.sonatype.org/sites/m2e,安装插件成功后,修改插件映射到上面安装的apache-maven-3.0.4。
5. 下载安装svn。可以直接下载eclipse svn插件,然后解压到eclipse的dropins目录下,重启eclipse即可生效。
6. 下载TT源码,svn co http://code.taobao.org/svn/TimeTunnel/trunk。
7. 编译问题:在timetunnel-broker中有jms-1.1.jar、jmxri-1.2.jar和jmxtools-1.2.jar三个jar包在maven的远程仓库中无法下载,可以手动下载后,在pom.xml里引入。例如
<dependency>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
<version>1.1</version>
<scope>system</scope>
<systemPath>${basedir}/lib/ jms-1.1.jar</systemPath>
</dependency> <dependency>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
<version>1.2</version>
<scope>system</scope>
<systemPath>${basedir}/lib/ jmxri-1.2.jar</systemPath>
</dependency> <dependency>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
<version>1.2</version>
<scope>system</scope>
<systemPath>${basedir}/lib/ jmxtools-1.2.jar</systemPath>
</dependency>
另外一种方法,消除对这三个包的依赖,然后在pom.xml中引入jms-1.1.jar配置。
注:引入jms-1.1.jar需要配置jboss镜像库。
8. 编译源码
mvn clean install –Dmaven.test.skip=true
编译成功后各模块内容:
broker:broker/target/dist
client:client/java/target/dist
router:router/target/dist
9. 安装TT
将各模块拷贝到目标目录即可,假设目标目录为/usr/tt,则可以这样拷贝:
cp -r broker/target/dist /usr/tt/broker/
cp -r router/target/dist /usr/tt/router/
cp -r client/java/target/dist /usr/tt/client/
10. 安装zookeeper
官网下载:http://zookeeper.apache.org/
本文使用的zookeeper-3.4.3.tar.gz。解压到目标文件夹。具体操作如下:
root@ubuntu:/usr/hadoop# tar zvxf zookeeper-3.4.3.tar.gz
root@ubuntu:/usr/hadoop/zookeeper-3.4.3# cp conf/zoo_sample.cfg conf/zoo.cfg
root@ubuntu:/usr/hadoop/zookeeper-3.4.3# vim conf/zoo.cfg
打开zoo.cfg,设置dataDir=/usr/tt/data。
启动zookeeper服务:
root@ubuntu:/usr/hadoop/zookeeper-3.4.3/bin# ./zkServer.sh start
11. 配置zookeeper
执行下面命令:
root@ubuntu:/usr/hadoop/zookeeper-3.4.3/bin# ./zkCli.sh
用户信息:
create /user mydata
create /user/name1 {“password”:”111111”}
Topic信息:
create /categories mydata
--创建了一个topic t1,注意group的值要和broker中的一致
create /categories/t1 {“timetolive”:”60”,”group”:”group1”}
create /categories/t1/subscribers mydata
create /categories/t1/subscribers/name1-t1 mydata
--创建了一个topic tt2,注意group的值要和broker中的一致
create /categories/t2 {“timetolive”:”60”,”group”:”group1”}
create /categories/t2/subscribers mydata
create /categories/t2/subscribers/name1-t2 mydata
基本配置完成。
12. 配置router
打开/usr/tt/router/conf/router.properties文件。
#zookeeper服务地址串,逗号分隔地址,斜杠分隔根目录
ZK_HOST_LIST=192.168.200.131:2181
#zookeeper连接超时时间,单位:毫秒,默认为3000,配置范围[3000-500000]
ZK_TIMEOUT=50000
#zookeeper客户端个数,默认为1,配置范围[1-500]
ZK_CLIENT_SIZE=3
#zookeeper客户端尝试重连次数,默认值:3,配置范围[0-10000]
#ZK_RETRY_COUNT=3
#zookeeper客户端尝试重连间隙时间,单位:毫秒,默认值:100,配置范围[10-10000]
#ZK_RETRY_INTERVAL=1000
#router服务类型,默认值:BLOCK,配置范围[NONBLOCK|BLOCK]
SERVER_TYPE=BLOCK
#router服务地址,默认值:本机地址
SERVER_HOST=192.168.200.131
#router服务端口,配置范围[1025-65534]
SERVER_PORT=9090
#router服务客户端超时时间,默认值:0,BLOCK有效
CLIENT_TIMEOUT=0
#router最大工作线程,默认值1000,配置范围[1-10000],BLOCK有效
MAX_THREADS=1000
#router最小工作线程数,默认值5,配置范围[1-10000],BLOCK有效
MIN_THREADS=5
#router停止服务超时时间,默认值60,配置范围[0,10000],BLOCK有效
STOP_TIMEOUT_VAL=60
#router停止服务超时单位,默认SECONDS,BLOCK有效
STOP_TIMEOUT_UNIT=SECONDS
#最大读取缓存,NONBLOCK有效
#MAX_READ_BUFFERBYTES
#是否持久化标记,默认true,配置范围[true|false]
#IS_PERSISTED=true
#非顺序的负载均衡策略,类名
LB_POLICY=RoundRobinStatelessLoadBalancer
#顺序负载均衡策略,类名
SEQ_LB_POLICY=ConstantLoadBalancer
修改红字部分,然后启动router:
root@ubuntu:/usr/tt/router/bin# ./router-start.sh
13. 配置broker
打开/usr/tt/broker/conf/conf.properties文件。
######################## 以下是启动必选配置项 #########################
# broker的home路径, 默认为当前目录, broker产生持久化数据会存在这个目录下
broker.home = /usr/tt/broker/target
# broker组, 分组以便分级服务.
broker.group = group1
# 设置broker对外服务(订阅发布)的端口
external.port = 9999
# 设置broker对内服务(数据可靠同步)的端口, 不设置则broker依旧可以单点运行
internal.port = 9998
# zookeeper是broker集群的协调者, 必须配置器连接地址和端口, eg : 192.168.1.132:33561,192.168.1.133:33561/root
zookeeper.connectString =192.168.200.131:2181
# 连接zookeeper会话超时时间, 单位毫秒, 它应该是zookeeper服务器配置的tickTime的2~20倍
zookeeper.sessionTimeout = 10000
# broker的主机名, 也可以是ip, 系统会自动取, 一般无需配置
broker.host = 192.168.200.131
######################## 以上是启动必选配置项 #########################
######################## 以下是调优可选配置项 #########################
# 一个订阅通常一组client来获取, 为保证每个client获取的数量近乎平均, 就需要在累计一定数量时进行同步, 这个同步点默认为200
# group.syncPoint = 200
# 为避免内存溢出, broker会根据内存的消耗情况, 将部分数据交换到磁盘文件中, 内存中保存其数据的索引
# 当内存短缺时开始交换, 直到内存充裕, 下面是分别配置短缺和充裕的内存比例值, 最大为99, 最小为1.
# 内存短缺比例默认为45
# memory.shortageRatio = 45
# 内存充裕比例默认为75
# memory.abundantRatio = 75
# 设置broker中thrift server服务的线程数, 默认是5, 可以根据应用要求适当调整
# broker.workThread = 5
# 设置broker中thrift server最大读取内存数, 默认为2的31次方, 一般情况下无需修改
# broker.maxReadBufferBytes =
# 设置broker中单个消息的最大值, 默认为4K, 单位可以是K或M
# broker.maxMessageSize = 4K
# 内存交换磁盘的文件大小, 默认64M, 单位可以是K或M
# chunk.capacity = 64M
# 内存交换磁盘的文件缓存, 默认32K, 单位可以是K或M
# chunk.buffer = 32K
########################## 以上是调优可选配置项 ###########################
修改红字部分,然后启动broker:
root@ubuntu:/usr/tt/broker/bin# ./broker-start.sh
14. 测试
配置和启动完成后,就可以用client代码测试了。或使用TimeTunnel相关应用程序来测试。
15. 整个系统架构需要启动三个服务:
| 启动 | 停止 | 对外端口 |
zookeeper | zkServer.sh start | zkServer.sh stop | 2181 |
route | router-start.sh | Router-stop.sh | 9090 |
broke | Broker-stop.sh | broker-stop.sh | 9999 |
每个服务启动后,可以telnet一下看是否启动成功没有。
注:参考资料
http://code.taobao.org/p/TimeTunnel/wiki/index/
……