关于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>

猜你喜欢

转载自blog.csdn.net/qq_41139036/article/details/80017236