h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote {
margin: 5px;
padding: 5;
}
body {
font-family: "Helvetica Neue", Helvetica, "Hiragino Sans GB", Arial, sans-serif;
font-size: 14px;
line-height: 18px;
color: #737373;
background-color: white;
margin: 10px 13px 10px 13px;

}

table {

margin: 10px 0 15px 0;

border-collapse: collapse;

}

td,th {

border: 1px solid #ddd;

padding: 3px 10px;

}

th {

padding: 5px 10px;

}

a {

color: #0069d6;

}

a:hover {

color: #0050a3;

text-decoration: none;

}

a img {

border: none;

}

p {

margin-bottom: 9px;

}

h1,

h2,

h3,

h4,

h5,

h6 {

color: #404040;

line-height: 36px;

}

h1 {

margin-bottom: 18px;

font-size: 30px;

}

h2 {

font-size: 24px;

}

h3 {

font-size: 18px;

}

h4 {

font-size: 16px;

}

h5 {

font-size: 14px;

}

h6 {

font-size: 13px;

}

hr {

margin: 0 0 19px;

border: 0;

border-bottom: 1px solid #ccc;

}

blockquote {

padding: 13px 13px 21px 15px;

margin-bottom: 18px;

font-family:georgia,serif;

font-style: italic;

}

blockquote:before {

content:"\201C";

font-size:40px;

margin-left:-10px;

font-family:georgia,serif;

color:#eee;

}

blockquote p {

font-size: 14px;

font-weight: 300;

line-height: 18px;

margin-bottom: 0;

font-style: italic;

}

code, pre {

font-family: Monaco, Andale Mono, Courier New, monospace;

}

code {

background-color: #fee9cc;

color: rgba(0, 0, 0, 0.75);

padding: 1px 3px;

font-size: 12px;

-webkit-border-radius: 3px;

-moz-border-radius: 3px;

border-radius: 3px;

}

pre {

display: block;

padding: 14px;

margin: 0 0 18px;

line-height: 16px;

font-size: 11px;

border: 1px solid #d9d9d9;

white-space: pre-wrap;

word-wrap: break-word;

}

pre code {

background-color: #fff;

color:#737373;

font-size: 11px;

padding: 0;

}

sup {

font-size: 0.83em;

vertical-align: super;

line-height: 0;

}

  • {

    -webkit-print-color-adjust: exact;

    }

    @media screen and (min-width: 914px) {

    body {

    width: 854px;

    margin:10px auto;

    }

    }

    @media print {

    body,code,pre code,h1,h2,h3,h4,h5,h6 {

    color: black;

    }

    table, pre {

    page-break-inside: avoid;

    }

    }

第一步:

下载和解压

假设我们将其解压到D:\software\kafka_2.11-1.1.0目录

第二步:启动服务

kafka依赖于zookeeper,所以,需要先启动zookeeper,使用kafka内置的脚本启动即可(可以不用自己下载)

cd D:\software\kafka_2.11-1.1.0

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

然后会发下,报错了,报错内容如下:

错误: 找不到或无法加载主类 Files\Java\jdk1.8.0_152\lib;D:\software\kafka_2.11-1.1.0\libs\aopalliance-repackaged-2.5.0-b32.jar;D:\software\kafka_2.11-1.1.0\libs\argparse4j-0.7.0.jar;D:\software\kafka_2.11-1.1.0\libs\commons-lang3-3.5.jar;D:\software\kafka_2.11-1.1.0\libs\connect-api-1.1.0.jar;D***

原因是java的安装的目录有空格,但是,在kafka的脚本中,设置classpath的时候,没有加入双引号

修改的方法是:

找到安装目录/bin/windows/kafka-run-class.bat ,找到

set COMMAND=%JAVA% %KAFKA_HEAP_OPTS% %KAFKA_JVM_PERFORMANCE_OPTS% %KAFKA_JMX_OPTS% %KAFKA_LOG4J_OPTS% -cp %CLASSPATH% %KAFKA_OPTS% %*

修改为:

set COMMAND=%JAVA% %KAFKA_HEAP_OPTS% %KAFKA_JVM_PERFORMANCE_OPTS% %KAFKA_JMX_OPTS% %KAFKA_LOG4J_OPTS% -cp "%CLASSPATH%" %KAFKA_OPTS% %*

就是在%CLASSPATH%上加了一个双引号

然后再次尝试执行启动zookeeper的脚本,这就启动成功了

然后启动kafka:

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

第三步:创建一个topic

我们用一个分区和一个副本创建一个名为“test”的topic:

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

执行下面的命令来查看topic,可以看到刚刚创建的test的topic

.\bin\windows\kafka-topics.bat --list --zookeeper localhost:2181
test

第四步:发送消息

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

运行生产者,然后在控制台中输入几条消息发送到服务器。

bin/windows/kafka-console-producer.bat --broker-list localhost:9092 --topic test

每一个就是一条消息,如果不需要再发送,就可以CTRL + C 把这个进程停掉即可

第五步:启动一个消费者

卡夫卡也有一个命令行消费者,将消息转储到标准输出。

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

如果您将上述每个命令都在不同的终端中运行,那么您现在应该能够将消息键入生产者终端,并将它们显示在消费者终端中。

所有的命令行工具都有其他选项;在没有参数的情况下运行该命令将显示更详细地记录它们的使用信息。

第六步:设置多broker群集

首先,我们为每个broker创建配置文件:

copy config/server.properties config/server-1.properties

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

我们已经有Zookeeper和我们的单节点了,所以我们只需要启动两个新节点:

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

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

现在创建一个复制因子为三的新topic:

bin/windows/kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic

现在我们有一个集群,我们怎么知道哪个broker在做什么?要查看运行“描述主题”命令:

bin/windows/kafka-topics.bat --describe --zookeeper localhost:2181 --topic my-replicated-topic

这里是对输出的解释。第一行给出了所有分区的摘要,每个附加行提供了有关一个分区的信息。由于我们只有一个分区,所以只有一行。

leader是负责给定分区的所有读写操作的节点。每个节点将成为分区随机选择部分的leader

replicas是复制此分区的日志的节点列表,无论他们是领导者还是他们仅仅只活着

isr是一组同步中的副本。这是复制品列表的子集,目前活着并被引导到leader身边

请注意,在我的示例中,节点1是该主题唯一分区的leader

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

bin/windows/kafka-topics.bat --describe --zookeeper localhost:2181 --topic test

所以在这里并不奇怪 - 原始主题没有副本,并且在服务器0上,它是我们创建群集时唯一的服务器。

给新的主题发送一些消息:

bin/windows/kafka-console-producer.bat --broker-list localhost:9092 --topic my-replicated-topic

消费这些消息:

bin/windows/kafka-console-consumer.bat --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic

现在,我们测试容错,因为broker1是leader,所以我们将它的进程停掉

wmic process where "caption = 'java.exe' and commandline like '%server-1.properties%'" get processid

得到的进程信息如下:

ocessid

ProcessId

8824

杀掉这个进程

> taskkill -pid 8824 -F

成功: 已终止 PID 为 8824 的进程。

leader已切换到其中一个从属节点,并且节点1不再处于同步副本集中:

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

但是即使原先写入的领导者失败,这些消息仍然可用于消费:

bin/windows/kafka-console-consumer.bat --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic

第七步:使用kafka的连接来导入和导出数据

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

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

首先,我们创建一些数据来作为测试数据:

echo foo> test.txt

echo bar>> test.txt

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

bin/windows/connect-standalone.bat 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中的消息并将它们写入文件测试.sink.txt。我们可以通过检查输出文件的内容来验证通过整个管道传输的数据:

test.sink.txt文件中,会出现我们在test.txt里边写入的内容,

数据存储在Kafka的一个名为connect-test的topic中,因此我们还可以运行控制台使用者以查看主题中的数据(或使用自定义使用者代码来处理它)

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

{"schema":{"type":"string","optional":false},"payload":"foo"}
{"schema":{"type":"string","optional":false},"payload":"bar"}

连接器继续处理数据,所以我们可以将数据添加到文件中,并看到它在整个管道中移动

您应该看到新添加的数据行出现在控制台消费者输出和接收器文件中

第八步:使用Kafka Streams处理数据

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

kafka 的quick start(windows平台)的更多相关文章

  1. 在Linux和Windows平台上操作MemoryMappedFile(简称MMF)

    操作系统很早就开始使用内存映射文件(Memory Mapped File)来作为进程间的共享存储区,这是一种非常高效的进程通讯手段..NET 4.0新增加了一个System.IO. MemoryMap ...

  2. windows平台解决quick3.5final + sublimeText3 模拟器找不到的问题

    下载了quick3.5 准备在sublime上进行开发,结果发现quick3.5中的player模拟器不见了,原来模拟器移到了quick引擎主目录下的 /tools/simulator/runtime ...

  3. Windows平台摄像头或屏幕RTMP推送介绍:OBS VS SmartPublisher

    好多开发者问道,既然有了OBS,你们为什么还要开发SmartPublisher? 的确,在我们进行Windows平台RTMP推送模块开发之前,市面上为数不多的Windows平台RTMP推流工具当属OB ...

  4. Windows平台分布式架构实践 - 负载均衡

    概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为 ...

  5. Windows平台分布式架构实践 - 负载均衡(下)

    概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...

  6. 如何下载Github单个文件(Windows平台)

    如何下载Github单个文件(Windows平台) 前提 安装Chrome 浏览器 Chrome浏览器 安装迅雷软件 安装Chrome 迅雷插件 可能商店里迅雷插件有好几种,这里使用这一种 一般使用者 ...

  7. 从零起步搭建Wordpress个人博客——Windows 平台篇(上)

    本文以 Windows Server R2 64bit 标准版 为基础,其他windows版本可能会略有不同. 参考资料: https://codex.wordpress.org/Installing ...

  8. 在Github上搭建自己的博客(Windows平台)

    折腾了好久,终于在Github上搭建了自己的博客.这里面总结一下过程希望对大家能有所帮助. Github建博优缺点 和 csdn,新浪,网易相比,在Github上可以自己实现功能 和阿里云,VPS相比 ...

  9. Windows平台分布式架构实践 - 负载均衡 上

    概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为 ...

随机推荐

  1. js 浅拷贝和深拷贝

    传值与传址 了解了基本数据类型与引用类型的区别之后,我们就应该能明白传值与传址的区别了.在我们进行赋值操作的时候,基本数据类型的赋值(=)是在内存中新开辟一段栈内存,然后再把再将值赋值到新的栈中.例如 ...

  2. 通过tarball形式安装HBASE Cluster(CDH5.0.2)——Hadoop NameNode HA 切换引起的Hbase错误,以及Hbase如何基于NameNode的HA进行配置

    通过tarball形式安装HBASE Cluster(CDH5.0.2)——Hadoop NameNode HA 切换引起的Hbase错误,以及Hbase如何基于NameNode的HA进行配置 配置H ...

  3. VVDocumenter规范注释生成器

    下载地址:https://github.com/onevcat/VVDocumenter-Xcode PS:Xcode 8.0 默认支持了,但是是关闭状态,需要在终端输入如下命令开启,然后重启 Xco ...

  4. js替换数组中的一个对象用for循环遍历

    for(let i=0;i<statusList.length;i++){ if (statusList[i]['tableId'] === tableId) { statusList[i]=d ...

  5. java Enum 类型互转

    refer:enum与int.String之间的转换http://www.blogjava.net/wangxinsh55/archive/2012/11/07/390958.html enum< ...

  6. MVC使用 Elmah 日志记录组件

    在后台管理中,有一些操作是需要增加操作日志的,尤其是对一些比较敏感的金额类的操作,比如商城类的修改商品金额.删除商品.赠送金额等人工的操作.日志中记录着相关操作人的操作信息,这样,出了问题也容易排查. ...

  7. symfony分页实现方法

    1.symfony分页是要用到组件的,所以这里使用KnpPaginatorBundle实现翻页 2. 用composer下载 在命令行中:  composer require "knplab ...

  8. apache 配置会话保持

    1.修改apache_home/conf/httpd.conf,增加以下模块(取消注释,如有其他依赖, 则相应取消注释) LoadModule proxy_module modules/mod_pro ...

  9. 【D】分布式系统的CAP理论

    2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想.2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP.之后, ...

  10. c++浅拷贝和深拷贝---14

    原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/ 1.什么是拷贝构造函数: 拷贝构造函数,又称复制构造函数,是一种特殊的构造函数,它由编译器调用来 ...