noHup - 后台开发
type: channel
link: http://rin.nohup.cc/category/background_development/
items: php页面不能被解析成网页，而是直接显示了页面代码
items: FastDFS分布式文件系统在服务器集群上的安装部署
items: 机器学习项目服务器上线部署全流程记录
items: ubuntu14.04安装gearman及perl扩展包
items: 配置Apache2服务器以CGI方式运行Perl程序
items: Java后台获取客户端ip地址的注意事项
items: kafka在java中简单应用
items: SQLite数据库在java中应用
items: KafkaOffsetMonitor监控消息消费状态
items: ubuntu14.04单机安装配置zookeeper和kafka

php页面不能被解析成网页，而是直接显示了页面代码
type: item
date: 2018-10-29T08:05:00+00:00
description: Overview问题描述解决方案参考文献 Overview 之前安装过很多次的phpMyAdmin，但最近一次安装时，出现了一个之前从来没遇到的问题：访问phpMyAdmin时，主页的php页面会被不能被解析成网页，而是直接显示了页面代码。 问题描述 文字描述已经比较清楚了，就不截图了。如果想看截图，参考 phpmyadmin showing php script [duplicate]。 对比之前的安装流程，发现这次安装Apache2时，php还没装（这个一般装Ubuntu系统时都会自动装上，这次居然没装，所以才会碰到这么少见的错误），所以php是在Apache2后面安装的。这样的问题在于，当Apache2安装时，没有检测到系统有php，所以就以为用户安装Apache2不是为了运行php网站（尽管Apache2最常见的应用就是做php网站容器，但实际上可以用作多种语言网站的容器，比如perl的CGI程序，但需要手动配置添加专门的模块，使Apache2支持perl的CGI程序，不然你通过Apache2访问你的perl页面，也会被直接显示为代码，而不是页面，参见配置Apache2服务器以CGI方式运行Perl程序），也就没有安装配置支持php的模块。 解决方案 先安装php，再安装Apache2，这样Apache2安装时，会检测到php，然后自动安装配置好支持php网站的模块。 如果不幸顺序反了（后面又发现，好像跟顺序无关，还是有可能报这个错误 =。=），那使用下面的命令手动给Apache2安装支持php的模块 先用下面的命令看看你装的php版本： php --version 出现下面的信息： PHP 7.0.32-0ubuntu0.16.04.1 (cli) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies with Zend OPcache v7.0.32-0ubuntu0.16.04.1, Copyright (c) 1999-2017, by Zend Technologies 如果你装的是php 7.0，那通过下面的命令 sudo apt-get install libapache2-mod-php7.0 然后重启Apache2 sudo service apache2 restart 就可以了。 参考文献 phpmyadmin showing php script [duplicate] 配置Apache2服务器以CGI方式运行Perl程序

FastDFS分布式文件系统在服务器集群上的安装部署
type: item
date: 2018-04-06T15:21:00+00:00
description: Overview1.必备软件2.libfastcommon的安装3.FastDFS的安装4. 配置FastDFS4.1 创建跟踪器和存储节点的配置文件4.2 修改tracker配置文件4.3 修改storage配置文件4.4 查看所有存储节点信息5. 测试上传文件5.1 修改tracker服务器上的client配置文件6. 测试下载文件 Overview 到目前为止，我们手里已经有了10台服务器了。之前一直说要把这些服务器搭建一个分布式文件系统，现在条件终于成熟了。这些服务器预装的系统大多数是Ubuntu16.04LTS发行版的Linux，少部分是Ubuntu14.04LTS。这次我们选择5台服务器，1台feagen(118.138.241.39)服务器作为tracker，4台服务器(Bastion3(118.138.240.146)，Bastion4(118.138.233.74)，Bastion6(118.138.233.26)，POSSUM(118.138.233.27))作为storage。这里会记录下FastDFS分布式文件系统在Ubuntu16.04上的安装部署过程的细节。 5台服务器都要安装，只是配置文件稍有不同。 1.必备软件 FastDFS 这个去GitHub上面下载源码：FastDFS libfastcommon 这个仍然要去GitHub上面下载源码：libfastcommon 这两个Zip包用wget或者在本地下载上传至服务器均可。 2.libfastcommon的安装 首先解压libfastcommon-master.zip包： unzip libfastcommon-master.zip 进入这个文件夹： cd libfastcommon-master/ 依次输入如下命令： sudo ./make.sh sudo ./make.sh install 输入第二条命令之后，会有如下显示： mkdir -p /usr/lib64 mkdir -p /usr/lib install -m 755 libfastcommon.so /usr/lib64 install -m 755 libfastcommon.so /usr/lib mkdir -p /usr/include/fastcommon install -m 644 common_define.h hash.h chain.h logger.h base64.h shared_func.h pthread_func.h ini_file_reader.h _os_define.h sockopt.h sched_thread.h http_func.h md5.h local_ip_func.h avl_tree.h ioevent.h ioevent_loop.h fast_task_queue.h fast_timer.h process_ctrl.h fast_mblock.h connection_pool.h fast_mpool.h fast_allocator.h fast_buffer.h skiplist.h multi_skiplist.h flat_skiplist.h skiplist_common.h system_info.h fast_blocked_queue.h php7_ext_wrapper.h id_generator.h char_converter.h char_convert_loader.h /usr/include/fastcommon 可以看到libfastcommon.so安装到了/usr/lib64. 下面，我们需要为两个文件创建软链接，指向FastDFS主程序的lib目录： sudo ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so sudo ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so sudo ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so sudo ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so 3.FastDFS的安装 解压fastdfs-master.zip文件: unzip fastdfs-master.zip 进入FastDFS源码根目录: cd fastdfs-master 依次输入下面两条命令： sudo ./make.sh sudo ./make.sh install…

机器学习项目服务器上线部署全流程记录
type: item
date: 2018-03-02T06:36:00+00:00
description: Overview1.Java端1.1 安装JDK1.81.2 安装Tomcat71.2.1 配置Tomcat7启动内存1.3 检查安装php和Apache21.4 设置Apache2反向代理1.5 安装MySQL5.71.6 安装配置phpmyadmin2.Perl后台2.1 设置Apache2 CGI2.2 Perl相关模块安装2.3 gearman消息队列安装3. Python相关安装4. R语言及相关包安装 Overview 我们团队完整的机器学习项目已经做了两个了，分别是Bastion4和Bastion6。之前两个项目上线部署的记录过于片段化，针对现在马上要做完的Bastion3项目，我们在此完整记录搭建服务器各种环境的全部流程，以备不时之需。 完整的项目基本分为三大部分：Java处理业务逻辑；Perl后台消息队列；R机器学习模型预测。每个大部分还有很多细节，我们会在每部分都详细记录。 新申请的云服务器预装的仍然是Ubuntu16.04LTS发行版的Linux系统。 1.Java端 Java端负责将用户提交的任务信息提交至后台Perl服务器并记录在MySQL数据库中。因此这部分会安装JDK1.8，Tomcat7和MySQL5.7。 1.1 安装JDK1.8 安装JDK1.8，用apt命令很方便，不用单独下载解压。命令如下： sudo apt-get install software-properties-common -y sudo add-apt-repository ppa:webupd8team/java -y sudo apt-get update sudo apt-get install oracle-java8-installer oracle-java8-set-default -y 安装完成之后，JDK1.8会被安装在/usr/lib/jvm/java-8-oracle中，在/etc/profile或者~/.bashrc中配置JAVA_HOME变量 (我用的是~/.bashrc文件)： export JAVA_HOME=/usr/lib/jvm/java-8-oracle 安装好之后，需要以下命令使配置生效： source ~/.bashrc 1.2 安装Tomcat7 使用以下的命令安装Tomcat7: sudo apt-get install tomcat7 安装过程中，可能会报如下的错误(即使你已经配置好了JAVA_HOME): Jul 09 16:52:16 bastiondb systemd[1]: Starting LSB: Start Tomcat.... Jul 09 16:52:16 bastiondb tomcat7[6413]: * no JDK or JRE found - please...E Jul 09 16:52:16 bastiondb systemd[1]: tomcat7.service: Control process e...1 Jul 09 16:52:16 bastiondb systemd[1]: Failed to start LSB: Start Tomcat.. Jul 09 16:52:16 bastiondb systemd[1]: tomcat7.service: Unit entered fail.... Jul 09 16:52:16 bastiondb systemd[1]: tomcat7.service: Failed with resul.... Hint: Some lines were ellipsized, use -l to show in full. dpkg: error processing package tomcat7 (--configure): subprocess installed post-installation script returned error exit status 1 Errors were encountered while processing: tomcat7 E: Sub-process /usr/bin/dpkg returned an error code (1) 出现这个错误，说明tomcat7已经装好了，但是由于tomcat在启动时找不到JAVA_HOME的路径，所以报错。查看/etc/default/tomcat7，会发现下面这行： #JAVA_HOME=/usr/lib/jvm/openjdk-6-jdk 去掉注释，并改为我们自己的JAVA_HOME路径： JAVA_HOME=/usr/lib/jvm/java-8-oracle 重新运行安装命令： sudo apt-…

ubuntu14.04安装gearman及perl扩展包
type: item
date: 2016-09-13T07:49:00+00:00
description: Overview1.下载安装gearman2.安装perl扩展包3.运行测试perl脚本 Overview Bastion4这个项目经过我们实验验证和安全考虑，决定舍弃kafka而转用gearman这个消息队列框架，具体分析将在后续文章中给出，这里只记录gearman相关的安装。 1.下载安装gearman 最新版的gearman是gearmand-1.1.12。我们执行下面几步，先将其下载到本地主文件夹，并解压缩。 sudo apt-get update wget https://launchpad.net/gearmand/1.2/1.1.12/+download/gearmand-1.1.12.tar.gz tar zxvf gearmand-1.1.12.tar.gz cd gearmand-1.1.12/ 进入gearmand-1.1.12文件夹后，如果直接运行 ./configure 就会报缺少如下几个依赖包错误： configure: error: could not find boost configure: error: Could not find a version of the library configure: error: could not find gperf configure: error: Unable to find libevent configure: error: Unable to find libuuid 所以，我们先将这些依赖都安装好： sudo apt-get install libboost-dev sudo apt-get install libboost-all-dev sudo apt-get install gperf sudo apt-get install libevent-dev sudo apt-get install uuid-dev 安装好之后，如果没有错误，仍在gearmand-1.1.12文件夹下运行下面两条命令，编译时间比较长： sudo make sudo make install 这个过程中如果出现了错误，就运行下面的命令清除一下之前编译产生的可执行文件以及object文件(即扩展名为o的文件)： sudo make clean 继续重新安装编译： ./configure sudo make sudo make install 没有错误的话，就安装gearman的job server： sudo apt-get install gearman-job-server 安装好以后，运行一下gearman: gearman 会提示错误： gearman: error while loading shared libraries: libgearman.so.8: cannot open shared object file: No such file or directory 这表示找不到libgearman.so.8所在的目录。这时我们打开/etc/ld.so.conf文件： sudo vim /etc/ld.so.conf 添加一句话: include /usr/local/lib 保存退出，并执行下面这句： sudo /sbin/ldconfig 这样就不会出错了。 启动一下job server： gearmand -d 报错如下： gearmand: Could not open log file "/usr/local/var/log/gearmand.log", from "/home/young/gearmand-1.1.12", switching to stderr. (No such file or directory) 我们这样解决：在/usr/local/下面新建var子目录，进去，新建log子目录，再进去，新建文件gearmand.log。这样就没有问题了。 用sudo权限运行下面的命令： sudo gearmand -d -L 127.0.0.1 -p 4730 -d表示daemon，在后台运行； -L表示监听的ip，默认是localhost； -p表示监听的端口号port，默认是4730。 这样gearman在ubuntu14.04上面就安装成功了。 2.安装perl扩展包 perl端需要3个扩展包： Gearman::Server Gearman::Client Gearman::Worker 可以用之前Chris的博客BioPerl（一）：安装BioPerl中介绍的方法，先安装好CPAN。 之后，用sudo权限打开CPAN： sudo cpan 然后依次安装3个扩展包： install Gearman::Serv…

配置Apache2服务器以CGI方式运行Perl程序
type: item
date: 2016-07-28T04:34:00+00:00
description: Overview1. Apache2基本配置2. 配置Apache2支持Perl CGI程序2.1 创建一个Perl网站2.2 配置Apache服务器3. 可能遇到的一些错误3.1 500 Internal Server Error3.2 503 Service Unavailable3.3 404 Not Found3.4 403 Forbidden4. 小结参考文章 Overview 这次我们开发Bastion4服务器使用了JAVA+Perl的架构，后端用Perl做服务器提供Webservice，用JAVA框架Struts接收处理用户请求，再跟Perl服务器交互。 我们使用Apache2作为Perl服务器，由于Apache2默认并不支持Perl，因此需要简单配置一下，使得Apache2以CGI的方式支持Perl运行。在配置的过程中，参考了一些网页，但由于各个网页都没有完整地描述配置过程（至少在我们的服务器上是这样），所以这里记录一下我们配置的全过程。 1. Apache2基本配置 我们为Bastion4申请了一个新的云服务器，版本为NeCTAR Ubuntu 16.04 LTS x86_64，自带了Apache2服务器，下面简单列出了Apache2的一些基本信息： /etc/apache2/ Apache2的配置文件目录 /var/www/ Apache2的网站存放目录 /var/log/apache2/ Apache2的日志存放目录 /etc/apache2/apache2.conf Apache2的配置主文件，以前的Apache版本中，主配置文件名字叫httpd.conf，所以很多网页中还用到这个名字，不知道的话会造成很多混淆。尽管apache2.conf是主配置文件，但是多数具体的配置信息并不是写在这个文件中的，/etc/apache2目录中有还有几个文件夹分别记录了几个模块的配置信息，apache2.conf负责把他们导入整合在一起。 /etc/apache2/sites-enabled/ 看名字就可以明白，Apache2的网站配置文件一般都是放在这个目录中的，这个目录下的000-default.conf是我们经常要修改的配置文件。 我们假定Apache存放网站的根目录是/var/www/，如果不确定(因为默认好像是/var/www/html这个目录)，打开/etc/apache2/apache2.conf目录，查看下面的配置： <Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> 如果在你的配置里是 <Directory /var/www/html/> 修改成 <Directory /var/www/> 这样，当你把一个名叫Mywebsite的网站(通常是一个文件夹)，扔到/var/www中时，你就可以以http://localhost/Mywebsite/访问到这个网站了。 如果你的配置是<Directory /var/www/html/>，那你需要把你的网站扔到/var/www/html中，才能使用http://localhost/Mywebsite/访问，这是因为<Directory>设置了Apache的根目录，当你使用http://****/Mywebsite访问时，Apache会去当前的根目录/Mywebsite找这个网站。 由于Apache的端口号默认是80，而不加端口号的url访问都会被服务器默认定向到80端口，因此这里不需要添加端口号，如果你手动将Apache端口号修改成了别的端口号（比如8888），那你需要使用http://localhost:8888/Mywebsite/访问这个网站。 2. 配置Apache2支持Perl CGI程序 2.1 创建一个Perl网站 在/var/www下创建网站的目录，我们创建一个名字叫cgi-bin的网站作为例子： mkdir /var/www/cgi-bin 需要使用管理员权限的命令，请自己加上sudo。 在/var/www/cgi-bin中创建一个cgi_test.pl脚本，输入下面的内容： #!/usr/bin/perl -w use warnings; use CGI qw(:standard); #! must use 'my' to define a variable print header; my $now_string = localtime(); print "Hello, CGI using Perl! It's $now_string NOW! "; 为cgi_test.pl添加可执…

Java后台获取客户端ip地址的注意事项
type: item
date: 2016-07-23T13:09:00+00:00
description: Overview1.修改hosts文件2.设置eclipse Overview 前面讲到，消息队列需要用到客户端的ip地址和时间戳，获取客户端的ip地址就需要下面几行简单的代码。 import javax.servlet.http.HttpServletRequest; HttpServletRequest request = ServletActionContext.getRequest(); String ipAddress = request.getHeader("X-FORWARDED-FOR"); if (ipAddress == null) { ipAddress = request.getRemoteAddr(); } System.out.println(ipAddress); 我将上面几行代码，放入之前的PhosphoPredict项目的action中做实验，结果显示如下： 0:0:0:0:0:0:0:1 这和我们平时的认知不同，下面就是解决办法。 1.修改hosts文件 我在ubuntu14.04系统下，打开/etc/hosts文件，看到如下信息： # Localhost 127.0.0.1 localhost 127.0.0.1 young 255.255.255.255 broadcasthost ::1 localhost fe80::1%lo0 localhost 我们将 ::1 localhost 这句注释掉，再提交， 127.0.0.1 正确答案就出现了。 其他系统，请自行查找文件目录并修改。 2.设置eclipse 我们在eclipse运行本程序的时候，可以配置一下运行参数： 依次点击Run→Run Configurations…→Apache Tomcat→Tomcat v7.0 Server at localhost,这时候点击右边的Arguments，在下面的VM arguments框中加上一句： -Djava.net.preferIPv4Stack=true 最后点击Apply。然后就可以了。 总结：这是因为，只有在本机提交的时候，才会出现，客户端提交就会显示真实ip地址了。而系统会优先显示ipv6格式的本机ip。我们两种方法，第一种是屏蔽掉ipv6的表示方法，第二种则是指定优先ipv4表示。 两种方法更推荐第二种。 这篇文章主要参考了stackoverflow.

kafka在java中简单应用
type: item
date: 2016-07-11T14:57:00+00:00
description: Overview1.新建项目配置环境2.生产者消费者程序2.1 生产者2.2 消费者3. 测试 Overview 之前的这篇博客ubuntu14.04单机安装配置zookeeper和kafka，介绍了zookeeper和kafka的安装配置，并在命令行下验证了生产者消费者可以跑通。但是实际项目中，需要和java交互，不可能接触到命令行和后台的。本文旨在记录一下java和kafka的简单交互，web中道理相同，只不过程序入口换成了action。 1.新建项目配置环境 打开eclipse，依次点击Window→Preferences→Java→Build Path→User Libraries，然后在右边选择New ，添加一个自己常用的Library，我命名为kafka。选中kafka，右边选择Add External JARS，然后到之前安装好的kafka的目录，找到libs这个文件夹，如果按照上次配置好的情况，这里应该是15个jar文件，见下图： 全部选中，点击确定。这样，我们以后就可以复用了。 然后我们在eclipse中构建一个普通的java项目testKafka。右击项目，依次点击Build Path→Add Libraries→User Library，选择kafka这个library，点击Finish。这样环境就搭建好了。 2.生产者消费者程序 下面编码测试程序，即消息生产者和消息消费者。 2.1 生产者 package testKafka; import java.util.Properties; import kafka.javaapi.producer.Producer; import kafka.producer.KeyedMessage; import kafka.producer.ProducerConfig; public class MsgProducer { private static Producer<String,String> producer; private final Properties props=new Properties(); public MsgProducer(){ //定义连接的broker list props.put("metadata.broker.list", "127.0.0.1:9092"); //定义序列化类,Java中对象传输之前要序列化 props.put("serializer.class", "kafka.serializer.StringEncoder"); producer = new Producer<String, String>(new ProducerConfig(props)); } public static void main(String[] args) { MsgProducer mProducer=new MsgProducer(); //定义topic String topic="testkafka"; //定义要发送给topic的消息 String mString = "Hello kafka!"; //构建消息对象 KeyedMessage<String, String> data = new KeyedMessage<String, String>(topic, mString); //推送消息到broker producer.send(data); producer.close(); } } 这里需要注意，生产者这里，最少需要两个配置项：metadata.broker.list为127.0.0.1:9092和serializer.class设置为kafka.serializer.StringEncoder。打开上次配置的producer.properties文件，看到这两项配置分别为metadata.broker.list=localhost:9092，serializer.class=kafka.serializer.DefaultEncoder。broker list要一致，否则会报错。 这些项，最好写在配置文件里，方便以后添加服务器时候更改。 2.2 消费者 package testKafka; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import kafka.consumer.Consumer; import kafka.consumer.ConsumerConfig; import kafka.consumer.ConsumerIterator; i…

SQLite数据库在java中应用
type: item
date: 2016-07-09T15:04:00+00:00
description: Overview1.安装SQLite2.SQLite与java交互2.1 创建并连接数据库2.2 建表2.3 增加(insert)2.4 查找(select)2.5 更改(update)2.6 删除(delete) Overview 这次的服务器，我们准备使用消息队列和SQLite这两个新东西，SQLite主要负责将用户提交的序列信息存储，并在结果页面查询显示。存储的信息包括用户的ip+timeStamp，序列内容，序列的处理状态。 1.安装SQLite SQLite的安装特别简单。 ubuntu14.04这个版本自带SQLite，在命令行输入sqlite3，显示如下： ～sqlite3 SQLite version 3.8.2 2013-12-06 14:53:30 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> 如果没有出现上述信息，可以使用如下命令进行安装： sudo apt-get install sqlite3 每个版本的ubuntu的软件源略有新旧不同，但不影响使用。 2.SQLite与java交互 SQLite在java中的基本使用方法和其他诸如mysql等数据库大同小异，下面我们从创建并连接数据库，建表，增，删，改，查这6个方面简单介绍下。 2.1 创建并连接数据库 package testSQLite; import java.sql.Connection; import java.sql.DriverManager; public class SQLiteJDBC { public static void main( String args[] ) { Connection c; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:testSQLite.db"); } catch ( Exception e ) { e.printStackTrace(); } System.out.println("Connected database successfully"); } } 2.2 建表 package testSQLite; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class createTable { public static void main( String args[] ) { Connection c; Statement stmt; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:testSQLite.db"); System.out.println("Connected database successfully"); stmt = c.createStatement(); String sql = "CREATE TABLE TEAM " + "(NUMBER INT PRIMARY KEY NOT NULL, " + " NAME TEXT NOT NULL, " + " AGE INT NOT NULL, " + " COUNTRY CHAR(50), " + " POSITION CHAR(50))"; stmt.executeUpdate(sql); stmt.close(); c.close(); } catch ( Exception e ) { e.printStackTrace(); } System.out.println("Table created successfully"); } } 2.3 增加(insert) package testSQLite; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class insert { public static void main(String args[]) { Connection c; Statement stmt; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlit…

KafkaOffsetMonitor监控消息消费状态
type: item
date: 2016-06-10T04:31:00+00:00
description: Overview1. 安装jdk,zookeeper,kafka2. 安装配置KafkaOffsetMonitor3. 启动KafkaOffsetMonitor4.运行KafkaOffsetMonitor Overview 这次做服务器，计划加入消息队列，并在web页面显示当前提交的序列处理状态和已处理序列的信息。我们知道，在后台命令行中可以看到kafka的消息者处理消息的状态，但是，对于访问者来说，查看命令行是不现实的，于是我们便采用了KafkaOffsetMonitor这一开源软件。Github的下载地址如下:Kafka Offset Monitor。 1. 安装jdk,zookeeper,kafka 这部分可以参考上一篇文章：ubuntu14.04单机安装配置zookeeper和kafka。 2. 安装配置KafkaOffsetMonitor 新建一个文件夹，比如我在kafka文件夹下建立子文件夹kafkaMonitor下载好以后，把这个KafkaOffsetMonitor-assembly-0.2.0.jar文件放入kafkaMonitor文件夹。在当前位置新建一个kafkaMonitor.sh文件，文件内容如下： #! /bin/bash java -cp KafkaOffsetMonitor-assembly-0.2.0.jar \ com.quantifind.kafka.offsetapp.OffsetGetterWeb \ --zk localhost:2181 \ --port 8089 \ --refresh 10.seconds \ --retain 7.days 上面是最关键的几条配置，剩余配置不写也可以运行。逐一分析上面每一项配置： --zk 这里写的地址和端口，是zookeeper集群的各个地址和端口。应和kafka/bin文件夹中的zookeeper.properties中的host.name和clientPort一致。本机是host.name=localhost，clientPort=2181。 --port 这个是本软件KafkaOffsetMonitor的端口。注意不要使用那些著名的端口号，例如80,8080等。我采用了8089. --refresh 这个是软件刷新间隔时间，不要太短也不要太长。 --retain 这个是数据在数据库中保存的时间。 3. 启动KafkaOffsetMonitor 首先，启动zookeeper 切换到/home/young/zookeeper/bin目录下，运行下面命令： ./zkServer.sh start 然后，启动kafka： 切换到/home/young/kafka目录下，执行下面命令： bin/kafka-server-start.sh config/server.properties 最后，启动KafkaOffsetMonitor： 切换到/home/young/kafka/kafkaMonitor目录下面，执行下面命令： ./kafkaMonitor.sh 如果显示如下，就证明成功了： serving resources from: jar:file:/home/young/kafka/kafkaMonitor/KafkaOffsetMonitor-assembly-0.2.0.jar!/offsetapp SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 2016-06-10 12:05:13.724:INFO:oejs.Server:jetty-7.x.y-SNAPSHOT log4j:WARN No appenders could be found for logger (org.I0Itec.zkclient.ZkConnection). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 2016-06-10 12:05:13.781:INFO:oejsh.ContextHandler:started o.e.j.s.ServletContextH…

ubuntu14.04单机安装配置zookeeper和kafka
type: item
date: 2016-06-06T07:30:00+00:00
description: Overview1.安装配置zookeeper单机模式2.安装配置kafka单机模式2.1 配置server.properties2.2 配置zookeeper.properties2.3 配置producer.properties2.4 配置consumer.properties2.5 补充说明3.kafka的使用3.1 启动zookeeper服务3.2 启动kafka服务3.3 创建话题topic3.4 启动生产者producer3.5 启动消费者consumer Overview T4这个项目实验部分已经结束，下面需要将服务器做出来。为了方便以后扩展分布式的需要，这次将会运用Apache Kafka这个分布式消息发布订阅系统，以满足多人同时提交计算T4序列，解决并发排队问题。Apache kafka的详细介绍详见官网：Apache kafka。 运行Apache Kafka，需要先安装好jdk和zookeeper。jdk安装过程就不赘述了。 1.安装配置zookeeper单机模式 这里，我们选择的是zookeeper-3.4.5这个版本，官网下载链接zookeeper-3.4.5。下载之后将zookeeper-3.4.5.tar.gz移动到主文件夹并重命名： mv Downloads/zookeeper-3.4.5.tar.gz zookeeper.tar.gz 然后解压缩为zookeeper文件夹： tar -zxvf zookeeper.tar.gz 切换到zookeeper/conf目录： cd /home/young/zookeeper/conf 复制zoo_simple.cfg为zoo.cfg: cp zoo_simple.cfg zoo.cfg 打开zoo.cfg并修改内容如下： initLimit=10 syncLimit=5 dataDir=/home/young/zookeeper/data clientPort=2181 配置好后，手动创建dataDir目录： mkdir /home/young/zookeeper/data 为zookeeper配置环境变量，打开/etc/profile，在结尾添加如下两句，并保存： export ZOOKEEPER_HOME=/home/young/zookeeper export PATH=.:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH 切换到zookeeper/bin目录： cd /home/young/zookeeper/bin 启动zookeeper的server： ./zkServer.sh start 显示效果如下，则证明zookeeper配置成功： JMX enabled by default Using config: /home/young/zookeeper/bin/zookeeper/conf/zoo.cfg Starting zookeeper ... STARTED 需要结束服务时，仍在本目录下，执行如下命令即可： ./zkServer.sh stop 2.安装配置kafka单机模式 我们选择的是kafka_2.10-0.8.1.1.tgz，下载链接在这里：Apache kafka。下载之后放到主文件夹，并改名为kafka.tgz，然后解压缩到当前文件夹： tar -zxvf kafka.tgz 切换到kafka/config目录： cd /home/young/kafka/config 这里，我们需要修改4个配置文件：server.properties，zookeeper.properties，producer.properties，consumer.properties。 2.1 配置server.properties 下面几项是必须修改的，其他项目为默认配置： #broker.id需改成正整数，单机为1就好 broker.id=1 #指定端口号 port=9092 #localhost这一项还有其他要修改，详细见下面说明 host.name=localhost #指定kafka的日志目录 log.dirs=/home/young/kafka/kafka-logs #连接zookeeper配置项，这里指定的是单机，所以只需要配置localhost，若是实际生产环境，需要在这里添加其他ip地址和端口号 zookeeper.connect=localhost:2181 然后手动创建log.dirs空目录： mkdir /home/young/kafka/kafka-logs 2.2 配置zookeeper.properties 很简单，这个文件暂时只需要修改3项： #数据目录 dataDir=/home…