不了解卡夫卡的入门部分,就尝试着去探索它
请用中文进行原生演绎, 只需要一个选项:
背景
因为大数据、实时分析、数据挖掘和机器学习等等,大家都在写博客或者谈论这些内容,所以我对此很感兴趣。听起来很有意思。
所以,我个人对此很感兴趣,正在进行相关调研。
虽然我只是个业余爱好者,但在享受做这些现在才开始的事情。
请参考
有人在Kindle上发现了一本叫《Apache Kafka入门》的书。他记得在GW(Golden Week,即黄金周)左右买过这本书,但却一直闲置在iPad里。于是他决定趁暑假的时候拿出来看看,说不定可以做为暑期自由研究的一部分。嘿,是用日语写的哦,日语呢。
环境
-
- Ubuntu 14.04(32bit)
-
- OracleJDK 1.6.0_45
- Apache Kafka 0.7.2
安装
只是解压公式网站的软件包。
我最初尝试使用JDK1.8进行,但是在0.7x版本中无法运行。
由于不知道如何切换多个版本的JDK,所以在意想不到的地方学到了一些东西。
JDK的安装
$ sudo apt-get install -y oracle-java6-installer
$ sudo apt-get install -y oracle-java7-installer
$ sudo apt-get install -y oracle-java8-installer
更换JDK
$ update-java-alternatives -l # 一覧の取得
$ sudo update-java-alternatives -s java-7-oracle # 切り替え
如果你进行调查,就可以找到相关的信息。
[http://xyk.hatenablog.com/entry/2013/10/15/175623:title]
概况构成
经纪人是一个能够以队列形式保存和返回消息的服务器。
生产者是向经纪人投递消息的人。
消费者是参考经纪人中存储的消息的人。采用拉取方式进行访问。
经纪人将按照指定的大小来保留数据,并按照时间顺序删除旧的消息。
由于消息具有自由格式,因此应在应用程序之间共同确定。
如果我们决定采用一行表示的UTF-8 JSON,会更方便吗?虽然我还不太清楚。
让我们试试看
最初使用起來並不太困難。
考慮的是三個元素:Brocker(經紀人)、Producer(生產者)和Consumer(消費者),還有額外的Zookeeper(動物園管理員)。
安装
只需从官方网站下载并解压整个文件夹,然后将其放在任意位置即可。
在我家的环境中
$KAFKA_HOME/bin/kafka_run_class.sh
在我没有删除-XX:+UseCompressedOops选项的情况下,它无法正常工作,但我忘记了是0.8还是0.7的事情。好像是由于JVM不支持之类的原因导致它报错了。
启动Zookeeper
默认情况下,已启用使用Zookeeper选项来启动。
$ cd $KAFKA_HOME
$ bin/zookeeper-server-start.sh config/zookeeper.properties
启动经纪人服务器
一旦与Zookeeper连接后开始运动。反过来做,启动生产者就会死。
$ bin/kafka-server-start.sh config/server.properties
启动Producer
由于有针对试用版控制台的制作人,因此我们将启动该版本。
$ bin/kafka-console-producer.sh --zookeeper localhost:2181 --topic
启动Consumer
由于消费者也有一个专门用于控制台的版本,因此进行启动操作。
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
确定动作
于是,在Producer的控制台界面上随便输入一些字符,试试看。
[2014-08-17 13:04:00,752] INFO Creating async producer for broker id = 0 at 127.0.1.1:9092 (kafka.producer.ProducerPool)
わっはっは
[2014-08-17 13:04:25,861] INFO Connected to 127.0.1.1:9092 for producing (kafka.producer.SyncProducer)
われわれはうちゅうじんだ
只有当用户界面有反馈时,才会有回应。
[2014-08-17 13:04:17,385] INFO console-consumer-79113_fjkei-XS35V3-1408248256126-96c479ba Not creating event watcher for trivial whitelist test (kafka.consumer.ZookeeperConsumerConnector)
わっはっは
われわれはうちゅうじんだ
虽然连接的日志比起初的信息要迟到些让人感到不舒服,但也没关系。而且,如果重新启动消费者,就可以获取到以前输入的所有消息,所以数据似乎不会消失。
わっはっは
われわれはうちゅうじんだ
在这里基本用法已经结束。
虽然有关Java实现方法的说明也被写在了这里,但是一起写的话量会变得很多,所以我跳过这一部分。
官方网站上的示例也可以直接复制粘贴使用,只要能够阅读错误日志,你就可以边困惑边写出来。
思考
我花了大约三天的时间,总算理解了基本的操作。
由于官方文档的快速入门能够顺利运行,所以非常容易上手。
由于不熟悉Java,我对于如何构建HelloWorldProducer感到困惑,这是花费最长时间的部分。
所以,Kafka本身只是一种用于管理消息队列的软件。
一般来说,通过指定偏移量和主题来获取所需的数据是常见的使用方式。
由于目前的内容并不明白其中的价值,所以我觉得自己开发类似的软件也没有太大的区别,这是一个难点。
我有一种阅读书籍的感觉,觉得通过Zookeeper的协调以及日志的排队方式等方面做了一些改进,这使得它很容易实现规模化,这应该是它的优点。
其他一些 (qí tā yī xiē)
由于与Storm和Fluentd一起列在一起,所以了解这方面的情况可能对掌握世界的使用方法非常重要。
此外,最近似乎ElasticSearch+Kibana也很流行,所以如果能与其相互协作,就可以有很棒的用途。
此外,个人认为目前没有Python 3的驱动程序是个问题。