apache-kafkaapache-kafka入门


备注

Kafka是一种高吞吐量的发布 - 订阅消息传递系统,实现为分布式,分区,复制的提交日志服务。

取自官方卡夫卡网站

快速

单个Kafka代理可以处理来自数千个客户端的每秒数百兆字节的读写操作。

可扩展

Kafka旨在允许单个群集充当大型组织的中央数据主干。它可以弹性和透明地扩展,无需停机。数据流被分区并分布在一组机器上,以允许数据流大于任何一台机器的能力,并允许协调的消费者群集

耐用

消息将保留在磁盘上并在群集中进行复制,以防止数据丢失。每个代理都可以处理数TB的消息,而不会影响性能。

按设计分发

Kafka采用现代以集群为中心的设计,提供强大的耐用性和容错保证。

安装或设置

第1步 。安装Java 7或8

第2步 。从以下网址下载Apache Kafka: http//kafka.apache.org/downloads.html

例如,我们将尝试下载Apache Kafka 0.10.0.0

第3步 。提取压缩文件。

在Linux上:

tar -xzf kafka_2.11-0.10.0.0.tgz
 

在窗口上:右键单击 - >在此处提取

第4步 。启动Zookeeper

cd kafka_2.11-0.10.0.0
 

Linux的:

bin/zookeeper-server-start.sh config/zookeeper.properties
 

视窗:

bin/windows/zookeeper-server-start.bat config/zookeeper.properties
 

第5步 。启动Kafka服务器

Linux的:

bin/kafka-server-start.sh config/server.properties
 

视窗:

bin/windows/kafka-server-start.bat config/server.properties
 

介绍

Apache Kafka™是一个分布式流媒体平台。

意思是

1-It允许您发布和订阅记录流。在这方面,它类似于消​​息队列或企业消息传递系统。

2-It允许您以容错方式存储记录流。

3-It允许您在记录发生时处理它们。

它被用于两大类应用:

1 - 构建实时流数据管道,可在系统或应用程序之间可靠地获取数据

2 - 构建转换或响应数据流的实时流应用程序

Kafka控制台脚本对于基于Unix和Windows的平台是不同的。在示例中,您可能需要根据平台添加扩展。 Linux:位于bin/ with .sh 扩展名的脚本。 Windows:脚本位于bin\windows\ ,扩展名为.bat

安装

第1步: 下载代码并解压缩:

tar -xzf kafka_2.11-0.10.1.0.tgz
cd kafka_2.11-0.10.1.0
 

第2步:启动服务器。

为了能够以后删除主题,打开server.properties 并将delete.topic.enable 设置为true。

Kafka在很大程度上依赖于zookeeper,所以你需要先启动它。如果您没有安装它,您可以使用与kafka一起打包的便捷脚本来获得一个快速且脏的单节点ZooKeeper实例。

zookeeper-server-start config/zookeeper.properties
kafka-server-start config/server.properties
 

第3步:确保一切正常运行

您现在应该让zookeeper监听localhost:2181localhost:6667 上的单个kafka代理。

创建一个主题

我们只有一个代理,因此我们创建一个没有复制因子且只有一个分区的主题:

kafka-topics --zookeeper localhost:2181 \
    --create \
    --replication-factor 1 \
    --partitions 1 \
    --topic test-topic
 

检查你的主题:

kafka-topics --zookeeper localhost:2181 --list
test-topic

kafka-topics --zookeeper localhost:2181 --describe --topic test-topic
Topic:test-topic    PartitionCount:1    ReplicationFactor:1 Configs:
Topic: test-topic   Partition: 0    Leader: 0   Replicas: 0 Isr: 0
 

发送和接收消息

启动消费者:

kafka-console-consumer --bootstrap-server localhost:9092 --topic test-topic
 

在另一个终端上,启动生产者并发送一些消息。默认情况下,该工具将每行作为单独的消息发送给代理,而无需特殊编码。写一些行并用CTRL + D或CTRL + C退出:

kafka-console-producer --broker-list localhost:9092 --topic test-topic   
a message
another message
^D
 

消息应出现在消费者的终端中。

停止卡夫卡

kafka-server-stop 
 

启动多代理群集

以上示例仅使用一个代理。要设置真正的集群,我们只需要启动多个kafka服务器。他们会自动协调自己。

步骤1:为避免冲突,我们为每个代理创建一个server.properties 文件,并更改idportlogfile 配置属性。

复制:

cp config/server.properties config/server-1.properties
cp config/server.properties config/server-2.properties
 

编辑每个文件的属性,例如:

vim config/server-1.properties
broker.id=1
listeners=PLAINTEXT://:9093
log.dirs=/usr/local/var/lib/kafka-logs-1

vim config/server-2.properties
broker.id=2
listeners=PLAINTEXT://:9094
log.dirs=/usr/local/var/lib/kafka-logs-2
 

第2步:启动三个经纪人:

    kafka-server-start config/server.properties &
    kafka-server-start config/server-1.properties &
    kafka-server-start config/server-2.properties &
 

创建复制主题

kafka-topics --zookeeper localhost:2181 --create --replication-factor 3 --partitions 1 --topic replicated-topic

kafka-topics --zookeeper localhost:2181 --describe --topic replicated-topic
Topic:replicated-topic  PartitionCount:1    ReplicationFactor:3 Configs:
Topic: replicated-topic Partition: 0    Leader: 1   Replicas: 1,2,0 Isr: 1,2,0
 

这一次,有更多信息:

  • “leader”是负责给定分区的所有读取和写入的节点。每个节点将成为随机选择的分区部分的领导者。
  • “replicas”是复制此分区日志的节点列表,无论它们是否为领导者,或者即使它们当前处于活动状态。
  • “isr”是“同步”复制品的集合。这是副本列表的子集,该列表当前处于活跃状态并且已经被领导者捕获。

请注意,先前创建的主题保持不变。

测试容错

将一些消息发布到新主题:

kafka-console-producer --broker-list localhost:9092 --topic replicated-topic
hello 1
hello 2
^C
 

杀死领导者(在我们的例子中为1)。在Linux上:

ps aux | grep server-1.properties
kill -9 <PID>
 

在Windows上:

wmic process get processid,caption,commandline | find "java.exe" | find "server-1.properties" 
taskkill /pid <PID> /f
 

看看发生了什么:

kafka-topics --zookeeper localhost:2181  --describe --topic replicated-topic
Topic:replicated-topic  PartitionCount:1    ReplicationFactor:3 Configs:
Topic: replicated-topic Partition: 0    Leader: 2   Replicas: 1,2,0 Isr: 2,0
 

领导层已经转向经纪人2和“1”不再同步。但消息仍然存在(使用消费者自己检查)。

清理

删除这两个主题:

kafka-topics --zookeeper localhost:2181 --delete --topic test-topic
kafka-topics --zookeeper localhost:2181 --delete --topic replicated-topic