關於centOS 7 創建kafka回話

近期接觸kafka,以前沒用過,甚至linux也基本還給了老師,這次創建kafka也算是好好學習一番,總結如下:


我下載安裝的是純淨版Xshell


安裝wget命令:yum -y install wget

安裝rz,sz命令:yum -y install lrzsz

下載安裝jdk:
首先創建目錄:mkdir user/local

下載jdk:[root@localhost local]# wget http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.tar.gz
解壓縮:tar -xzf jdk-8u161-linux-x64.tar.gz
檢查並配置環境變量:vi /etc/profile

JAVA_HOME=/root/user/local/jdk1.8.0_161
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASS_PATH PATH

重啓服務:source /etc/profile

檢查jdk:java  或者 java -version

下載安裝kafka:wget http://mirrors.hust.edu.cn/apache/kafka/1.1.0/kafka_2.11-1.1.0.tgz

解壓縮kafka:tar -xzf kafka_2.11-1.1.0.tgz

進入kafka目錄:cd kafka_2.11-1.1.0

在啓動kafka之前,編輯一下config/server.properties文件,使用如下命令:
vi config/server.properties
在文件中追加host.name=192.168.198.130(此爲Linux服務器的ip,運行時請改成自己的服務器IP地址)

啓動zookeeper服務:
> nohup bin/zookeeper-server-start.sh config/zookeeper.properties > jz.zk.log &

啓動kafka服務:nohup bin/kafka-server-start.sh config/server.properties > server.ry.log &

(當使用java連接kafka時,應該開放kafka所使用的端口--9092,9032,9094,
可以在Windows cmd下使用如下命令來檢測服務器是否開放了9092端口: telnet 192.168.198.130 9092)

如果未開放:(若服務器端口未對外開放,則會出現如下警告和錯誤 :
[Consumer clientId=consumer-2, groupId=myGroup] 
Connection to node -1 could not be established. 
Broker may not be available.org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.)

使用如下命令查看:netstat -tunlp

開放9092端口:firewall-cmd --permanent --add-port=9092/tcp

檢查9092端口是否開放:firewall-cmd --permanent --query-port=9092/tcp

查看所有的topic:bin/kafka-topics.sh --list --zookeeper localhost:2181

查看指定的topic描述:(此處查看名爲“test”的主題) bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test

使用單個分區並且只有一個副本,創建一個名爲:"test"的主題:

> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

kafka附帶一個命令行客戶端,它將從文件或標準輸入中獲取輸入,並將其作爲消息發送到kafka集羣。
默認情況下,每一行將作爲一個單獨的消息發送。 運行生產者,然後在控制檯中輸入一些消息,發送給服務器:
> bin/kafka-console-producer.sh --broker-list 192.168.198.130:9092 --topic test

kafka還有一個命令行用戶,它會將消息轉儲到標準輸出:
> bin/kafka-console-consumer.sh --bootstrap-server 192.168.198.130:9092 --topic test --from-beginning

集羣---對於單個broker就是一個大小爲1的集羣,所以除了啓動更多的broker實例之外,沒有什麼變化。將集羣擴展爲3個節點(仍在本地機器上)。
首先我們要爲每個broker節點創建一個配置文件:
> cp config/server.properties config/server-1.properties
> cp config/server.properties config/server-2.properties

編輯配置文件:
  config/server-1.properties:
  broker.id=1
  listeners=PLAINTEXT://:9093
  log.dir=/tmp/kafka-logs-1

  config/server-2.properties:
  broker.id=2
  listeners=PLAINTEXT://:9094
  log.dir=/tmp/kafka-logs-2
  
在集羣中各個節點擁有唯一的broker.id屬性和不變的名字。我們必須重寫port端口和日誌目錄,因爲我們將所有這些都運行在同一臺機器上。
下面運行新增加的節點:
> nohup bin/kafka-server-start.sh config/server-1.properties >server1.ry.log & 
> nohup bin/kafka-server-start.sh config/server-2.properties >server2.ry.log &

創建一個新的主題my-replicated-topic擁有三個複製因子:
> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic

查看新主題my-replicated-topic:
> bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
> my-replicated-topic

第一行給出了所有分區的摘要,每一個額外的行提供了關於一個分區的信息。因爲這個主題只有一個分區,所以只有一行。

"leader"節點負責給定分區的所有讀寫,每個節點將成爲分區隨機選擇部分的領導者。
"replicas"是所有的節點,爲區分複寫日誌,不管他們是leader或即使他們當前是活躍的。
"isr" 用於設置"同步"replicas. 是replicas列表的子設定,該副本列表當前是活躍的,並被leader所捕獲

java 類的創建:
> 生產者類:com\example\kafkatest\kafkaTest\Producer.java 
> 消費者類:com\example\kafkatest\kafkaTest\Consumer.java

注意pom.xml中的dependencies:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.example</groupId>
<artifactId>kafkatest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>kafkatest</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>


<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<exclusions>
<!-- 建議這裏排除掉Kafka依賴,避免版本問題帶來困擾-->
<exclusion>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Slf4j 註解 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>

<dependency>
<groupId> org.apache.cassandra</groupId>
<artifactId>cassandra-all</artifactId>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章