Windows下Kafka2.8環境搭建教程
前言:
週末空閒時間無意找到了一套個性化推薦的原始碼,整體專案運用了SSH,HDFS,Flume,Hive,Kafka,Spark,Scala等。執行時,本來透過spark計算業務埋點資料時,卻發現本地沒有Kafka。因為我一直也沒使用過Kafka,所以也作為新人,淺談以下Kafka的環境安裝與分別在PHP,Scala中的使用。
對比:
1. 橫向,相比其他中介軟體。
關於kafka與其他訊息中介軟體的比較,網上很多的博主,不管是從執行原理還是中介軟體架構都有很詳細的介紹。因為我平時用Rabbit居多,在沒有看別人介紹前。Rabbi比Kafka於PHP開發更友好。因為kafka除了PHP的composer依賴包常年不更新外,kafka在windows下的PHP擴充套件需要自己編譯。從這一點上看Rabbit就更適合業務性的訊息佇列,更別說他還有事務等對訊息消費的高保障。kafka在資料增量方面更具優勢,所以多數在大資料和推薦系統中都有運用。
2. 縱向,相比其他版本。
如標題所見,這裡主要是2.8+與之前版本的對比。因為在2.8以前,kafka安裝前需要安裝zookeeper。這裡只是一小個區別,其他的新特性具體參考kafka官方文件,因為我看到網上關於kafka的安裝文章,別人都會安裝zookeeper,所以這裡就特別說明以下,以及後面啟動時與其他人部落格的不同。
安裝:
1. 下載
見上圖。
2. 配置
下載完後目錄結構如下,進入config, 主要對zookeeper.properties和server.properties進行分佈節點,服務埠,日誌存放目錄等等的設定,前期也是什麼不用管保持預設配置進行啟動。
3. 啟動
也不知道是不是從2.8開始,bin目錄下多了一個windows。所以在windows下啟動進入到改目錄,執行如下命令執行bat檔案。注意啟動的時候先zookeeper後kafka,停止的時候先kafka後zookeeper。
(1). zookeeper啟動
zookeeper-server-start.bat ..\..\config\zookeeper.properties &
(2).kafka啟動
kafka-server-start.bat ..\..\config\server.properties &
(3). 其他命令
檢視所有topics kafka-topics.bat --list --zookeeper localhost:2181
新增topics kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
Kafka儲存機制:
-
topic中partition儲存分佈
-
partiton中檔案儲存方式
-
partiton中segment檔案儲存結構
-
在partition中透過offset查詢message
圖形化工具:
前期可以藉助圖形化工具快速具象的檢視kafka的訊息資料,也能便於理解其基本操作流程。以下推薦一塊桌面端工具——offsetexplorer,可以在網上搜尋下載,當然web控制檯也不錯,比如kafka manager。
1. kafka連線
(2). Cluster name檢視
這個值如果沒有設定的情況是生成的,可以在啟動日誌中檢視,根目錄/logs/server.log
(3). Topics檢視
透過執行一下新增topics或新增訊息後就可以在Offset Explorer檢視了,更多的使用方法也可以在網上找到。
PHP操作:
1. 下載依賴
composer require nmred/kafka-php
2. 生產者 Producer.php
<?php require './vendor/autoload.php'; date_default_timezone_set('PRC'); /* 建立一個配置例項 */ $config = \Kafka\ProducerConfig::getInstance(); /* Topic的元資訊重新整理的間隔 */ $config->setMetadataRefreshIntervalMs(10000); /* 設定broker的地址 */ $config->setMetadataBrokerList('127.0.0.1:9092'); /* 設定broker的代理版本 */ $config->setBrokerVersion('1.0.0'); /* 只需要leader確認訊息 */ $config->setRequiredAck(1); /* 選擇非同步 */ $config->setIsAsyn(false); /* 每500毫秒傳送訊息 */ $config->setProduceInterval(500); /* 建立一個生產者例項 */ $producer = new \Kafka\Producer(); for($i = 0; $i < 100; $i++ ) { $producer->send([ [ 'topic' => 'test', 'value' => 'test'.$i, ], ]); }
3. 消費者 Consumer.php
<?php require './vendor/autoload.php'; date_default_timezone_set('PRC'); $config = \Kafka\ConsumerConfig::getInstance(); $config->setMetadataRefreshIntervalMs(10000); $config->setMetadataBrokerList('127.0.0.1:9092'); $config->setGroupId('test'); $config->setBrokerVersion('1.0.0'); $config->setTopics(['test']); $consumer = new \Kafka\Consumer(); $consumer->start(function($topic, $part, $message) { var_dump($message); });
Scala操作:
1. 建立基於Maven的Scala專案
(1). 建立
(2). 新增模板(沒有模板的前提)
可以網上搜尋Scala-archetype-simple的位置並填寫。
(3). 完成建立等待IDE自動構建
(4). 給專案新增Scala SDK依賴
2. 配置
(1). 修改pom.xml的scala版本為本地安裝scala對應的號。
(2). Cannot resolve plugin org.scala-tools:maven-scala-plugin: unknown解決方法
新增一下依賴後再Maven重新整理 <dependency> <groupId>org.scala-tools</groupId> <artifactId>maven-scala-plugin</artifactId> <version>2.11</version> </dependency> <dependency> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-eclipse-plugin</artifactId> <version>2.5.1</version> </dependency>
<!--kafka--><dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka_2.11</artifactId> <version>1.1.0</version></dependency><dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>1.1.0</version></dependency>
4. 建立消費者
package com.xudongimport java.util.Propertiesimport org.apache.kafka.clients.producer.{KafkaProducer, ProducerRecord, RecordMetadata}object KafkaProducerDemo { def main(args: Array[String]): Unit = { val prop = new Properties // 指定請求的kafka叢集列表 prop.put("bootstrap.servers", "127.0.0.1:9092") prop.put("acks", "all") // 請求失敗重試次數 //prop.put("retries", "3") // 指定key的序列化方式, key是用於存放資料對應的offset prop.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer") // 指定value的序列化方式 prop.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer") // 配置超時時間 prop.put("request.timeout.ms", "60000") val producer = new KafkaProducer[String, String](prop) // 傳送給kafka for (i <- 1 to 25) { val msg = s"${i}: this is a linys ${i} kafka data" println("send -->" + msg) val rmd: RecordMetadata = producer.send(new ProducerRecord[String, String]("ceshi", msg)).get() println(rmd.toString) Thread.sleep(500) } producer.close() } }
5. 建立消費者
package com.xudongimport java.util.{Collections, Properties}import org.apache.kafka.clients.consumer.{ConsumerRecords, KafkaConsumer}object KafkaConsumerDemo { def main(args: Array[String]): Unit = { val prop = new Properties prop.put("bootstrap.servers", "127.0.0.1:9092") prop.put("group.id", "group01") prop.put("auto.offset.reset", "earliest") prop.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer") prop.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer") prop.put("enable.auto.commit", "true") prop.put("session.timeout.ms", "30000") val kafkaConsumer = new KafkaConsumer[String, String](prop) kafkaConsumer.subscribe(Collections.singletonList("ceshi")) // 開始消費資料 while (true) { val msgs: ConsumerRecords[String, String] = kafkaConsumer.poll(2000) // println(msgs.count()) val it = msgs.iterator() while (it.hasNext) { val msg = it.next() println(s"partition: ${msg.partition()}, offset: ${msg.offset()}, key: ${msg.key()}, value: ${msg.value()}") } } } }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70029959/viewspace-2953358/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- windows環境下Django環境搭建WindowsDjango
- Windows環境下的Nginx環境搭建WindowsNginx
- Windows 下搭建 lnmp 環境WindowsLNMP
- Windows下搭建Solr環境WindowsSolr
- windows下搭建lisp環境WindowsLisp
- Windows 下搭建 Homestead 環境Windows
- 【轉】 Windows下LAMP環境搭建WindowsLAMP
- windows下flutter2.2.3環境搭建WindowsFlutter
- Windows 下搭建ios 開發環境WindowsiOS開發環境
- Windows下搭建ESP-IDF環境搭建Windows
- Flutter環境搭建(Windows)FlutterWindows
- go windows 環境搭建GoWindows
- git windows 環境搭建GitWindows
- Windows 下 Homestead 環境搭建遇到的坑Windows
- Windows環境下ELK簡單搭建記錄Windows
- 第二課 如何在WINDOWS環境下搭建以太坊開發環境Windows開發環境
- Windows上搭建Android開發環境詳細教程WindowsAndroid開發環境
- windows 下搭建swoft2 本地開發環境Windows開發環境
- Windows系統下使用Sublime搭建nodejs環境WindowsNodeJS
- Windows下React Native開發環境的搭建WindowsReact Native開發環境
- Windows7下PHP 7.1搭建開發環境WindowsPHP開發環境
- windows server 2003下搭建amp環境WindowsServer
- windows下搭建Apache+Mysql+PHP開發環境WindowsApacheMySqlPHP開發環境
- Windows環境下從零開始Zend Framework 2.0 (ZF2)環境搭建WindowsFramework
- Flutter系列(三)——環境搭建(Windows)FlutterWindows
- Windows搭建Superset環境學習Windows
- windows 前端工作環境搭建指北Windows前端
- GOLang開發環境搭建(Windows)Golang開發環境Windows
- windows開發genieacs環境搭建Windows
- window環境下testlink環境搭建(xammp)
- 以太坊-Win環境下remix環境搭建REM
- Windows 環境下 Python 環境安裝WindowsPython
- mac 下搭建flutter環境MacFlutter
- Centos下搭建golang環境CentOSGolang
- docker下LNMP環境搭建DockerLNMP
- Windows 下 Laravel 環境配置WindowsLaravel
- NVM,Windows下環境配置Windows
- windows下JDK環境配置WindowsJDK