kafka,分布式集群架构下,高性能的流式事件数据(主要是消息)集成、发布(生产)和订阅(分发、消费)组件(中间件)。
kafka依赖zooeeper(数据后端),这里有Windows下安装配置启动zookeeper的 文章(1):
如果zookeeper过于陈旧,需要更新,那么zookeeper最新的下载链接:
Apache ZooKeeperhttps://zookeeper.apache.org/releases.html#download
kafka最新下载链接:
Apache Kafka
https://kafka.apache.org/downloads.html
实际上最新版的kafka已经内置、集成了zookeeper,可以按照kafka官方文档的快速启动文档跳过zookeeper配置,直接投入使用kafka,发布和订阅消息。不过鉴于系统各个关键组件和模块要解耦的思想,本文单独基于独立安装配置启动的zookeeper,然后由kafka连接到zookeeper,然后再启动kafka。
(第一部分)安装配置启动zookeeper。
这里重新简单介绍一下如何配置安装配置启动zookeeper。具体可参考文章(1)。
(1)解压从Apache下载的zookeeper压缩包后,进入/cof目录,里面有有一个zoo_sample.cfg文件,这个文件是zookeeper的配置文件,重命名该文件为zoo.cfg,并修改这个文件里面的内容,修改dataDir:
dataDir=E:/zk/tmp/data
这里存放zookeeper存储的数据。
(2)新增log日志存放目录:
dataLogDir=E:/zk/tmp/log
(3)本例只使用集群中的一个机器,所以简单配置一个:
server.1=127.0.0.1:2889:3889
(4)写一个叫做 myid的文件,把该文件复制一份,myid里面写入(3)中的 1,放到/tmp/data/目录下面。
(5)启动zookeeper。
通过Windows控制台,进入/bin目录下,运行zkServer.bat,即启动了zookeeper:
(第二部分)安装配置启动kafka。
如果是一台单点机器,kafka配置文件可不用修改,直接到bin目录下启动kafka-server-start即可。若是分布式集群,就需要配置kafka。
找到config\server.properties文件,里面的zookeeper.connect即为kafka要连接的zookeeper的地址,根据自己部署的zookeeper地址进行配置:

log.dirs配置自己设备上用于存放kafka日志的路径:

以上配置完成后,进入bin/windows目录下,找到kafka-server-start.bat文件,启动:
kafka-server-start.bat E:/kafka/config/server.properties

启动成功。
(第三部分)基于命令行,在kafka中发布消息/订阅查看消息。
(1)创新主题topic。
kafka创建主题topic需要配置两个核心参数:
replication-factor
partitions
replication-factor:表示副本数量。每个topic可以有多个副本,副本位于集群中不同的broker上,副本的数量不能超过broker数量,否则创建主题会失败。
partitions:主题topic的分区数。kafka通过分区策略,把不同分区分配在集群中的broker上,一般会分散在不同的broker上,当只有一个broker时,所有分区就只分配到该broker上。消息会通过负载均衡发布到不同的分区上,消费者监控偏移量感知哪个分区有新数据,然后从该分区拉取新消息数据。
在旧版kafka中,创建主题topic需要,新版的kafka不需要。创建一个叫做zhangphil_demo的主题topic:
kafka-topics.bat --create --topic zhangphil_demo --bootstrap-server localhost:9092
创建成功后系统输出:
WARNING: Due to limitations in metric names, topics with a period ('.') or underscore ('_') could collide. To avoid issues it is best to use either, but not both.
Created topic zhangphil_demo.
查看刚才新建的主题zhangphil_demo的详细信息:
kafka-topics.bat --describe --topic zhangphil_demo --bootstrap-server localhost:9092
输出:

(2)在主题topic写入/发布数据(生产者),消费/订阅数据(消费者)。
kafka-console-producer.bat --topic zhangphil_demo --bootstrap-server localhost:9092
该命令是在名为zhangphil_demo的主题topic下写入数据。
为了观察效果,最好先启动kafka的消费者(订阅者),订阅主题topic:zhangphil_demo:
kafka-console-consumer.bat --topic zhangphil_demo --from-beginning --bootstrap-server localhost:9092
即,先启动kafka的订阅消费者,接受来自主题zhangphil_demo的消息。这时候,再在主题zhangphil_demo写入消息,如图:

没在主题zhangphil_demo里面写入一条消息,hello,world! x,订阅者/消费者就能收到发布者的消息。
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
我打算为ruby脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121