kafka快速开始

一、创建一个topic

创建一个名为“test1”的topic,它有一个分区和一个副本,进入windows路径下,执行

kafka-topics.bat --create --zookeeper 192.168.175.104:2181 --replication-factor 1 --partitions 1 --topic test1

运行list(列表)命令来查看这个topic

kafka-topics.bat --list --zookeeper 192.168.175.104:2181

使用kafka自带的生产者和消费者客户端测试时,不能使用localhost,须明确指定本机域名

在 server.properties,添加如下配置:

host.name = 192.168.111.130 # 本机ip地址

二、发送一些消息(生产者)

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

运行 producer,然后在控制台输入一些消息以发送到服务器。

kafka-console-producer.bat --broker-list 192.168.175.104:9092 --topic test

三、接收消息(消费者)

Kafka 还有一个命令行consumer(消费者),将消息转储到标准输出。

kafka-console-consumer.bat --bootstrap-server 192.168.175.104:9092 --topic test --from-beginning

将消息输入到生产者终端中,它们将在消费终端中显示出来。生产者进行输入,消费者中直接输出。

四、设置多代理集群

到目前为止,我们一直在使用单个代理,这并不好玩。对Kafka来说,单个代理只是一个大小为一的集群,除了启动更多的代理实例外,没有什么变化。为了深入了解它,让我们把集群扩展到三个节点(仍然在本地机器上)。

首先,为每个代理创建一个配置文件:

E:\kafka_2.12-1.0.0\config>copy server.properties server-1.properties
已复制         1 个文件。

E:\kafka_2.12-1.0.0\config>copy server.properties server-2.properties
已复制         1 个文件。

现在编辑这些新文件并设置如下属性:

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属性是集群中每个节点的名称,这一名称是唯一且永久的。我们必须重写端口和日志目录,因为我们在同一台机器上运行这些,我们不希望所有的代理尝试在同一个端口注册,或者覆盖彼此的数据。

我们已经建立Zookeeper和一个单节点了,现在我们只需要启动两个新的节点:

E:\kafka_2.12-1.0.0>bin\windows\kafka-server-start.bat config\server-1.properties
E:\kafka_2.12-1.0.0>bin\windows\kafka-server-start.bat config\server-2.properties

现在创建一个副本为3的新topic:

E:\kafka_2.12-1.0.0\bin\windows>kafka-topics.bat --create --zookeeper 192.168.175.104:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic

Good,现在我们有一个集群,但是我们怎么才能知道那些代理在做什么呢?运行"describe topics"命令来查看:

E:\kafka_2.12-1.0.0\bin\windows>kafka-topics.bat --describe --zookeeper 192.168.175.104:2181 --topic my-replicated-topic

以下是对输出信息的解释。第一行给出了所有分区的摘要,下面的每行都给出了一个分区的信息。因为我们只有一个分区,所以只有一行。

  • “leader”是负责给定分区所有读写操作的节点。每个节点都是随机选择的部分分区的领导者。

  • “replicas”是复制分区日志的节点列表,不管这些节点是leader还是仅仅活着。

  • “isr”是一组“同步”replicas,是replicas列表的子集,它活着并被指到leader。

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

我们可以在已创建的原始主题上运行相同的命令来查看它的位置:

E:\kafka_2.12-1.0.0\bin\windows>kafka-topics.bat --describe --zookeeper 192.168.175.104:2181 --topic test

这没什么大不了,原来的主题没有副本且在服务器0上。我们创建集群时,这是唯一的服务器。

 让我们发表一些信息给我们的新topic:

kafka-console-producer.bat --broker-list 192.168.175.104:9092 --topic my-replicated-topic

现在我们来消费这些消息:

kafka-console-consumer.bat --bootstrap-server 192.168.175.104:9092 --from-beginning --topic my-replicated-topic

让我们来测试一下容错性。 Broker 1 现在是 leader,让我们来杀了它:

> wmic process where "caption = 'java.exe' and commandline like '%server-2.properties%'" get processid
ProcessId
6016
> taskkill /pid 6016 /f

领导权已经切换到一个从属节点,而且节点1也不在同步副本集中了:

> bin/kafka-topics.bat --describe --zookeeper 192.168.175.104:2181 --topic my-replicated-topic
Topic:my-replicated-topic   PartitionCount:1    ReplicationFactor:3 Configs:
    Topic: my-replicated-topic  Partition: 0    Leader: 1   Replicas: 1,2,0 Isr: 1,0

不过,即便原先写入消息的leader已经不在,这些消息仍可用于消费

五、使用Kafka Connect来导入/导出数据

从控制台读出数据并将其写回是十分方便操作的,但你可能需要使用其他来源的数据或将数据从Kafka导出到其他系统。针对这些系统, 你可以使用Kafka Connect来导入或导出数据,而不是写自定义的集成代码。

Kafka Connect是Kafka的一个工具,它可以将数据导入和导出到Kafka。它是一种可扩展工具,通过运行connectors(连接器), 使用自定义逻辑来实现与外部系统的交互。 在本文中,我们将看到如何使用简单的connectors来运行Kafka Connect,这些connectors 将文件中的数据导入到Kafka topic中,并从中导出数据到一个文件。

首先,我们将创建一些种子数据来进行测试:

> echo foo> test.txt #新建test文件并在文件中写入一行foo
> echo bar>> test.txt #test文件并在文件中写入一行bar

接下来,我们将启动两个standalone(独立)运行的连接器,这意味着它们各自运行在一个单独的本地专用 进程上。 我们提供三个配置文件。首先是Kafka Connect的配置文件,包含常用的配置,如Kafka brokers连接方式和数据的序列化格式。 其余的配置文件均指定一个要创建的连接器。这些文件包括连接器的唯一名称,类的实例,以及其他连接器所需的配置。

bin\windows\connect-standalone.bat config\connect-standalone.properties config\connect-file-source.properties config\connect-file-sink.properties

这些包含在Kafka中的示例配置文件使用您之前启动的默认本地群集配置,并创建两个连接器: 第一个是源连接器,用于从输入文件读取行,并将其输入到 Kafka topic。 第二个是接收器连接器,它从Kafka topic中读取消息,并在输出文件中生成一行。

在启动过程中,你会看到一些日志消息,包括一些连接器正在实例化的指示。 一旦Kafka Connect进程启动,源连接器就开始从test.txt读取行并且 将它们生产到主题connect-test中,同时接收器连接器也开始从主题connect-test中读取消息, 并将它们写入文件test.sink.txt中。我们可以通过检查输出文件的内容来验证数据是否已通过整个pipeline进行交付。

数据存储在Kafka topic` connect-test `中,因此我们也可以运行一个console consumer(控制台消费者)来查看 topic 中的数据(或使用custom consumer(自定义消费者)代码进行处理):

bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic connect-test --from-beginning

连接器一直在处理数据,所以我们可以将数据添加到文件中,并看到它在pipeline 中移动。您应该可以看到这一行出现在控制台用户输出和接收器文件中。

> echo testAnother line>> test.txt #test文件并在文件中写入一行testAnother line

 控制台输出:

此目录会不定期更新,喜欢我的文章希望和我一起成长的宝宝们,可以搜索并添加公众号TryTestwonderful ,或者扫描下方二维码添加公众号

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半夏映浮光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值