中间件——centos7.6下部署kafka_2.12解压版

ApacheKafka®是一个分布式流平台

官网对于kafka的介绍

目录

一、下载包,并解压

二、启动服务器

三、建立主题

四、发送一些消息

五、建立多经济商丛集

六、使用kafka connect导入/导出数据

七、使用kafka Streams处理数据

八、相关问题


一、下载包,并解压

yum -y install wget  vim  net-tools  nc
wget  https://mirror.bit.edu.cn/apache/kafka/2.4.1/kafka_2.12-2.4.1.tgz
tar -xzf kafka_2.12-2.4.1.tgz 
  • 安装jdk

tar -xzf jdk-8u241-linux-x64.tar.gz 
mv jdk1.8.0_241 /usr/local/java

#添加环境
# vim /etc/profile
  #java环境变量
  export JAVA_HOME=/usr/local/java
  export PATH=$JAVA_HOME/bin:$PATH
  export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib

#使其生效
source /etc/profile

二、启动服务器

Kafka使用ZooKeeper,因此如果您还没有,请首先启动ZooKeeper服务器。您可以使用kafka随附的便利脚本来获取快速且肮脏的单节点ZooKeeper实例

  • 启动zookeeper服务
cd kafka_2.12-2.4.1
./bin/zookeeper-server-start.sh config/zookeeper.properties 

#开新终端,查看zookeeper默认端口
# netstat -anpt|grep java
  tcp6       0      0 :::38652                :::*                    LISTEN      8060/java           
  tcp6       0      0 :::2181                 :::*                    LISTEN      8060/java
  • 配置服务【此处暂时不操作作为补充内容】
# vim /root/kafka_2.12-2.4.1/config/server.properties  
  36 #advertised.listeners=PLAINTEXT://your.host.name:9092
  改为
  36 advertised.listeners=PLAINTEXT://:192.168.30.202:9092
  • 启动kafka服务器

cd kafka_2.12-2.4.1
./bin/kafka-server-start.sh config/server.properties 
  • 查看kafka默认端口
# netstat -anpt|grep java
  tcp6       0      0 :::38652                :::*                    LISTEN      8060/java           
  tcp6       0      0 :::38078                :::*                    LISTEN      8415/java           
  tcp6       0      0 :::9092                 :::*                    LISTEN      8415/java           
  tcp6       0      0 :::2181                 :::*                    LISTEN      8060/java           
  tcp6       0      0 127.0.0.1:40798         127.0.0.1:9092          ESTABLISHED 8415/java           
  tcp6       0      0 127.0.0.1:9092          127.0.0.1:40798         ESTABLISHED 8415/java           
  tcp6       0      0 ::1:2181                ::1:51918               ESTABLISHED 8060/java           
  tcp6       0      0 ::1:51918               ::1:2181                ESTABLISHED 8415/java 
  • 启动Kafka Broker后,在ZooKeeper终端上键入命令 jps,效果如下:
# jps
14099 QuorumPeerMain
15192 Jps
14797 Kafka

三、建立主题

  • 新开一终端,让我们用一个分区和一个副本创建一个名为“ test”的主题:
cd kafka_2.12-2.4.1
./bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
  • 现在,如果我们运行list topic命令,我们可以看到该主题(查询topic列表):
./bin/kafka-topics.sh --list --bootstrap-server localhost:9092
test
或者
./bin/kafka-topics.sh --list --zookeeper localhost:2181
test

或者,除了手动创建主题外,还可以将代理配置为在发布不存在的主题时自动创建主题。

  • 查看topic信息
./bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic test
Topic: test    PartitionCount: 1    ReplicationFactor: 1    Configs: 
    Topic: test    Partition: 0    Leader: 0    Replicas: 0    Isr: 0
  • 删除topic【此处暂时不操作,作为补充内容】
./bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic test

四、发送一些消息

Kafka带有一个命令行客户端,它将从文件或标准输入中获取输入,并将其作为消息发送到Kafka集群。默认情况下,每行将作为单独的消息发送。

  • 运行生产者,然后在控制台中键入一些消息以发送到服务器。
#启动生产者
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic  test

#启动消费者,开新终端
cd kafka_2.12-2.4.1
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

参考:《linux安装kafka》

  • 生产者终端(发送消息):君问归期未有期,巴山夜雨涨秋池。 ——李商隐(唐代)-《夜雨寄北》
# ./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic  test
>君问归期未有期,巴山夜雨涨秋池。 ——李商隐(唐代)-《夜雨寄北》
  • 消费者终端(接收消息):君问归期未有期,巴山夜雨涨秋池。 ——李商隐(唐代)-《夜雨寄北》
# bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
君问归期未有期,巴山夜雨涨秋池。 ——李商隐(唐代)-《夜雨寄北》

五、建立多经济商丛集

到目前为止,我们一直在与一个经纪人竞争,但这并不有趣。对于Kafka来说,单个代理只是一个大小为1的集群,因此除了启动更多的代理实例之外,没有什么太大的变化。但是,只是为了感受一下,让我们将集群扩展到三个节点(仍然全部在本地计算机上)。

首先,我们为每个代理创建一个配置文件(在Windows上,使用copy命令代替):

cd /root/kafka_2.12-2.4.1
cp ./config/server.properties ./config/server-1.properties
cp ./config/server.properties ./config/server-2.properties
  • 现在编辑这些新文件并设置以下属性:
# vim ./config/server-1.properties 
  21 broker.id=0
  31 #listeners=PLAINTEXT://:9092
  60 log.dirs=/tmp/kafka-logs
改为
  21 broker.id=1
  31 listeners=PLAINTEXT://:9093
  60 log.dirs=/tmp/kafka-logs-1

# vim ./config/server-2.properties 
  21 broker.id=0
  31 #listeners=PLAINTEXT://:9092
  60 log.dirs=/tmp/kafka-logs
改为
  21 broker.id=2
  31 listeners=PLAINTEXT://:9094
  60 log.dirs=/tmp/kafka-logs-2

broker.id属性是集群中每个节点的唯一且永久的名称。我们只需要覆盖端口和日志目录,这是因为我们都在同一台计算机上运行它们,并且希望所有代理都不要试图在同一端口上注册或覆盖彼此的数据。

  • 我们已经有Zookeeper并启动了单个节点,因此我们只需要启动两个新节点:
./bin/kafka-server-start.sh ./config/server-1.properties &
./bin/kafka-server-start.sh ./config/server-2.properties &
  • 创建一个具有三个复制因子的新主题:my-replicated-topic
./bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 3 --partitions 1 --topic my-replicated-topic

查看创建的主题
# ./bin/kafka-topics.sh --list --bootstrap-server localhost:9092
  __consumer_offsets
  my-replicated-topic
  test
  • 好的,但是现在有了集群,我们如何知道哪个经纪人在做什么?要查看该命令,请运行“描述主题”命令:
# ./bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic my-replicated-topic
  Topic: my-replicated-topic	PartitionCount: 1	ReplicationFactor: 3	Configs: 
  segment.bytes=1073741824
	  Topic: my-replicated-topic	Partition: 0	Leader: 1	Replicas: 1,0,2	Isr: 1,0,2

这是输出的说明。第一行给出了所有分区的摘要,每一行都给出了有关一个分区的信息。由于该主题只有一个分区,因此只有一行。

  • “领导者”是负责给定分区的所有读取和写入的节点。每个节点将成为分区的随机选择部分的领导者。
  • “副本”是为该分区复制日志的节点列表,无论它们是引导者还是当前处于活动状态。
  • “ isr”是“同步”副本的集合。这是副本列表的子集,当前仍处于活动状态并追随领导者。

请注意,在我的示例中,节点1是主题唯一分区的领导者。

  • 我们可以在创建的原始主题上运行相同的命令,以查看其位置:
# ./bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic test
  Topic: test	PartitionCount: 1	ReplicationFactor: 1	Configs: segment.bytes=1073741824
	Topic: test	Partition: 0	Leader: 0	Replicas: 0	Isr: 0

因此,这里没有任何惊喜-原始主题没有副本,并且位于服务器0上,这是我们创建群集时集群中唯一的服务器。

  • 让我们向我们的新主题发布一些消息:
# ./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic
  >海上生明月,天涯共此时
  >^C
  • 现在让我们使用(接收)这些消息:
# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic
  海上生明月,天涯共此时
  • 现在让我们测试一下容错能力。经纪人1扮演领导者的角色,所以让我们杀死它:
# ps aux | grep server-1.properties
  root      22561  3.8 15.8 3225640 157392 pts/4  Sl   10:49   1:25 /usr/local/java/bin/java......
# kill -9 22561

在Windows上使用:

1个
2
3
4
> wmic process where "caption = 'java.exe' and commandline like '%server-1.properties%'" get processid
ProcessId
6016
> taskkill /pid 6016 /f
  • 领导层已切换为关注者之一,并且节点1不再位于同步副本集中:my-replicated-topic    
# ./bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic my-replicated-topic
  Topic: my-replicated-topic	PartitionCount: 1	ReplicationFactor: 3	Configs: segment.bytes=1073741824
   	Topic: my-replicated-topic	Partition: 0	Leader: 0	Replicas: 1,0,2	Isr: 0,2
  • 但是,即使最初进行写操作的领导者已经下线,消息仍然可供使用:
# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic
  海上生明月,天涯共此时
  海上生明月,天涯共此时

六、使用kafka connect导入/导出数据

从控制台写入数据并将其写回到控制台是一个方便的起点,但是您可能要使用其他来源的数据或将数据从Kafka导出到其他系统。对于许多系统,可以使用Kafka Connect导入或导出数据,而无需编写自定义集成代码。

Kafka Connect是Kafka附带的工具,用于将数据导入和导出到Kafka。它是运行连接器的可扩展工具,该 连接器实现用于与外部系统进行交互的自定义​​逻辑。在本快速入门中,我们将看到如何使用简单的连接器运行Kafka Connect,该连接器将数据从文件导入到Kafka主题,并将数据从Kafka主题导出到文件。

  • 首先,我们将从创建一些种子数据开始进行测试:
cd kafka_2.12-2.4.1
echo -e "foo\nbar" > test.txt

或在Windows上:

1个
2
> echo foo> test.txt
> echo bar>> test.txt

接下来,我们将启动两个以独立模式运行的连接器,这意味着它们将在单个本地专用进程中运行。我们提供了三个配置文件作为参数。第一个始终是Kafka Connect流程的配置,其中包含通用配置,例如要连接的Kafka代理和数据的序列化格式。其余的配置文件均指定要创建的连接器。这些文件包括唯一的连接器名称,要实例化的连接器类,以及连接器所需的任何其他配置。

 ./bin/connect-standalone.sh ./config/connect-standalone.properties ./config/connect-file-source.properties ./config/connect-file-sink.properties 

这些样本配置文件(随Kafka一起提供)使用您先前启动的默认本地集群配置并创建两个连接器:第一个是源连接器,该连接器从输入文件中读取行并将每个行生成到Kafka主题,第二个是接收器连接器从Kafka主题读取消息,并在输出文件中将它们作为一行显示。

在启动过程中,您将看到许多日志消息,其中包括一些表明正在实例化连接器的消息。Kafka Connect进程启动后,源连接器应开始从test.txt主题中读取行并将其生成到主题connect-test,而接收器连接器应开始从主题中读取消息connect-test 并将其写入文件test.sink.txt

  • 我们可以通过检查输出文件的内容来验证数据已通过整个管道传递:
# cd kafka_2.12-2.4.1
# more test.sink.txt 
  foo
  bar
  • 请注意,数据存储在Kafka主题中connect-test,因此我们也可以运行控制台使用者以查看该主题中的数据(或使用自定义使用者代码进行处理):
# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic connect-test --from-beginning
  {"schema":{"type":"string","optional":false},"payload":"foo"}
  {"schema":{"type":"string","optional":false},"payload":"bar"}
  • 连接器继续处理数据,因此我们可以将数据添加到文件中,并查看它在管道中的移动情况:
# cd kafka_2.12-2.4.1
# echo Another line>> test.txt
  • 您应该看到该行出现在控制台使用者输出和接收器文件中。
# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic connect-test --from-beginning
  {"schema":{"type":"string","optional":false},"payload":"foo"}
  {"schema":{"type":"string","optional":false},"payload":"bar"}
  {"schema":{"type":"string","optional":false},"payload":"Another line"}

七、使用kafka Streams处理数据

Kafka Streams是用于构建关键任务实时应用程序和微服务的客户端库,其中输入和/或输出数据存储在Kafka集群中。Kafka Streams结合了在客户端编写和部署标准Java和Scala应用程序的简便性以及Kafka服务器端集群技术的优势,使这些应用程序具有高度可伸缩性,弹性,容错性,分布式等等。此快速入门示例将演示如何运行此库中编码的流应用程序。

 

八、相关问题

问题1:引导代理本地主机:9092(id:-1 rack:null)已断开连接

# ./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
>[2020-03-30 18:11:40,496] WARN [Producer clientId=console-producer] Bootstrap broker localhost:9092 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient)

参考:Apache Kafka中的用户身份验证和授权

原因:启动生产者时,迟迟没有启动消费者导致的警告,

解决:此时启动消费者即可解决

 

问题2:在消费者终端接收的消息中莫名出现特殊�

  • 生产者终端(发送消息):君问归期未有期,巴山夜雨涨秋池。 ——李商隐(唐代)-《夜雨寄北》
# ./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic  test
>君问归期未有期,巴山夜雨涨秋池。 ——李商隐(唐代)-《夜雨寄北》
  • 消费者终端(接收消息):君问归期未有期,巴山夜雨涨秋池。 ——李商隐(�唐代)-�《夜雨寄北》
# bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
君问归期未有期,巴山夜雨涨秋池。 ——李商隐(�唐代)-�《夜雨寄北》

原因:直接在生产者终端编辑发送消息,输入()或者《》符号时多次按回车键导致的

解决:提前编辑好信息,复制粘贴就不会出现以上问题

参考 :官网

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值