Lenses Box / fast-data-dev
Apache Kafka开发人员docker镜像;包含 Lenses (lensesio/box) 或Lenses.io的开源UI工具 (lensesio/fast-data-dev)。只需几秒钟即可拥有一个功能齐全的Kafka安装,并配备现代流平台(仅适用于kafka-lenses-dev)、直观的UI和额外功能。还包括Kafka Connect、Schema Registry、Lenses.io的Stream Reactor 25+连接器等。
介绍
当你需要:
- Kafka发行版,包含Apache Kafka、Kafka Connect、Zookeeper、Confluent Schema Registry和REST Proxy
- Lenses.io Lenses或kafka-topics-ui、schema-registry-ui、kafka-connect-ui
- Lenses.io Stream Reactor,25+个Kafka连接器简化ETL流程
- 集成到docker中的集成测试和示例
只需运行:
docker run --rm --net=host lensesio/fast-data-dev
就这样。访问http://localhost:3030进入fast-data-dev环境
所有服务端口都已暴露,可以从localhost或IntelliJ中使用。Kafka broker默认暴露在端口9092,zookeeper在端口2181,schema registry在8081,connect在8083。例如,要访问broker的JMX数据,运行:
jconsole localhost:9581
如果你想远程访问这些服务,你可能需要传入你机器的IP地址或主机名,以便其他机器可以访问:
docker run --rm --net=host -e ADV_HOST=<IP> lensesio/fast-data-dev
按control+c停止并删除所有内容
Mac和Windows用户(docker-machine)
使用Docker Machine创建一个4+GB RAM的VM:
docker-machine create --driver virtualbox --virtualbox-memory 4096 lensesio
运行docker-machine ls
验证Docker Machine是否正在正确运行。命令输出应类似于:
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
lensesio * virtualbox Running tcp://192.168.99.100:2376 v17.03.1-ce
配置终端以使用名为lensesio的新Docker Machine:
eval $(docker-machine env lensesio)
运行Kafka开发环境。定义端口,公布主机名并使用额外参数:
docker run --rm -p 2181:2181 -p 3030:3030 -p 8081-8083:8081-8083 \
-p 9581-9585:9581-9585 -p 9092:9092 -e ADV_HOST=192.168.99.100 \
lensesio/fast-data-dev:latest
就是这样。访问http://192.168.99.100:3030进入fast-data-dev环境
在云端运行
你可能想在GCE或AWS上快速运行Kafka实例,并从本地计算机访问它。Fast-data-dev为你提供了支持。
在相应的云中启动一个VM。你可以使用你选择的操作系统,只要它有docker包。CoreOS是一个不错的选择,因为它自带docker。
接下来你必须打开防火墙,既要为你的机器打开,也要为VM本身打开。 这很重要!
防火墙打开后,尝试:
docker run -d --net=host -e ADV_HOST=[VM_EXTERNAL_IP] \
-e RUNNING_SAMPLEDATA=1 lensesio/fast-data-dev
或者只导出你需要的端口。例如:
docker run -d -p 2181:2181 -p 3030:3030 -p 8081-8083:8081-8083 \
-p 9581-9585:9581-9585 -p 9092:9092 -e ADV_HOST=[VM_EXTERNAL_IP] \
-e RUNNING_SAMPLEDATA=1 lensesio/fast-data-dev
享受Kafka、Schema Registry、Connect、Lensesio UI和Stream Reactor。
自定义执行
Fast-data-dev和kafka-lenses-dev支持通过环境变量进行自定义配置和额外功能。
fast-data-dev / kafka-lenses-dev高级配置
可选参数 | 描述 |
---|---|
CONNECT_HEAP=3G | 配置分配给Kafka Connect的最大(-Xmx )堆大小。在你想启动许多连接器时很有用。 |
<SERVICE>_PORT=<PORT> | 服务的自定义端口<PORT> ,0 将禁用它。<SERVICE> 可以是ZK 、BROKER 、BROKER_SSL 、REGISTRY 、REST 、CONNECT 之一。 |
<SERVICE>_JMX_PORT=<PORT> | 服务的自定义JMX端口<PORT> ,0 将禁用它。<SERVICE> 可以是ZK 、BROKER 、BROKER_SSL 、REGISTRY 、REST 、CONNECT 之一。 |
USER=username | 与PASSWORD 结合使用,指定要用于基本身份验证的用户名。 |
PASSWORD=password | 在公开运行时保护fast-data-dev UI。如果未设置USER ,默认用户名为kafka 。 |
SAMPLEDATA=0 | 不创建包含示例avro和json记录的主题;(例如不创建主题sea_vessel_position_reports 、reddit_posts )。 |
RUNNING_SAMPLEDATA=1 | 在示例主题中发送连续(但非常低)的消息流,以便你可以针对实时数据进行开发。 |
RUNTESTS=0 | 禁用容器启动时运行的(coyote)集成测试。 |
FORWARDLOGS=0 | 禁用运行将broker日志引入Kafka主题的文件源连接器。 |
RUN_AS_ROOT=1 | 以root 用户身份运行kafka - 用于测试HDFS连接器等。 |
DISABLE_JMX=1 | 禁用JMX - 默认在9581 - 9585端口启用。你也可以单独禁用服务的JMX。 |
ENABLE_SSL=1 | 生成CA、密钥-证书对,并在broker上启用SSL端口。 |
SSL_EXTRA_HOSTS=IP1,host2 | 如果启用了SSL,要包含在broker证书中的额外主机名和IP地址。 |
CONNECTORS=<CONNECTOR>[,<CON2>] | 显式设置将启用哪些连接器*。例如hbase 、elastic (Stream Reactor版本) |
DISABLE=<CONNECTOR>[,<CON2>] | 禁用一个或多个连接器*。例如hbase 、elastic (Stream Reactor版本)、elasticsearch (Confluent版本) |
BROWSECONFIGS=1 | 在UI中公开服务配置。用于查看Kafka的设置方式。 |
DEBUG=1 | 将所有进程的stdout和stderr打印到容器的stdout。用于调试容器早期退出。 |
SUPERVISORWEB=1 | 在端口9001(通过SUPERVISORWEB_PORT 调整)上启用supervisor web界面,以控制服务、运行tail -f 等。 |
*可用的连接器有:azure-documentdb、blockchain、bloomberg、cassandra、 coap、druid、elastic、elastic5、ftp、hazelcast、hbase、influxdb、jms、kudu、 mongodb、mqtt、pulsar、redis、rethink、voltdb、couchbase、dbvisitreplicate、 debezium-mongodb、debezium-mysql、debezium-postgres、elasticsearch、hdfs、 jdbc、s3、twitter。
要以编程方式获取列表,运行:
docker run --rm -it lensesio/fast-data-dev \
find /opt/lensesio/connectors -type d -maxdepth 2 -name "kafka-connect-*"
可选参数(不支持) | 描述 |
---|---|
WEB_ONLY=1 | 与--net=host 结合使用,docker将连接到在本地主机上运行的kafka服务。请改用我们的UI docker镜像。 |
TOPIC_DELETE=0 | 配置是否可以删除主题。默认情况下可以删除主题。请改用KAFKA_DELETE_TOPIC_ENABLE=false 。 |
配置Kafka组件
你可以通过将配置选项转换为大写、用下划线替换点并在前面加上<SERVICE>_
来配置任何Kafka组件(broker、schema registry、connect、rest proxy)。
例如:
- 要为broker设置
log.retention.bytes
,你需要设置环境变量KAFKA_LOG_RETENTION_BYTES=1073741824
。 - 要为schema registry设置
kafkastore.topic
,你需要设置SCHEMA_REGISTRY_KAFKASTORE_TOPIC=_schemas
。 - 要为connect worker设置
plugin.path
,你需要设置CONNECT_PLUGIN_PATH=/var/run/connect/connectors/stream-reactor,/var/run/connect/connectors/third-party,/connectors
。 - 要为rest proxy设置
schema.registry.url
,你需要设置KAFKA_REST_SCHEMA_REGISTRY_URL=http://localhost:8081
。
我们还支持设置JVM选项的变量,如KAFKA_OPTS
、SCHEMA_REGISTRY_JMX_OPTS
等。
Lensesio的Kafka发行版(LKD)还支持一些额外的标志。由于在Apache Kafka构建中,broker和connect worker都期望在默认的KAFKA_OPTS
中设置JVM选项,LKD支持为broker使用BROKER_OPTS
等,为connect worker使用CONNECT_OPTS
等。当然,KAFKA_OPTS
仍然受支持,并应用于这两个应用程序(和嵌入式zookeeper)。
LKD的另一个补充是Kafka Connect的VANILLA_CONNECT
、SERDE_TOOLS
和LENSESIO_COMMON
标志。默认情况下,我们在Connect Classpath中加载Confluent的Schema Registry和Serde Tools,以支持avro,以及我们自己的基础jar,以支持avro和我们的连接器。你可以选择运行完全vanilla的kafka connect,与官方发行版相同,不支持avro,方法是设置VANILLA_CONNECT=1
。请注意,大多数(如果不是全部)连接器将无法加载,所以最好禁用它们。SERDE_TOOLS=0
将禁用Confluent的jar,LENSESIO_COMMON=0
将禁用我们的jar。其中任何一个都足以支持avro,但禁用LENSESIO_COMMON
将使Stream Reactor无法运行。
版本
此docker镜像的最新版本跟踪我们的最新稳定标签(1.0.1)。我们的镜像包括:
版本 | Kafka发行版 | Lensesio工具 | Apache Kafka | 连接器 |
---|---|---|---|---|
lensesio/fast-data-dev:3.6.1 | LKD 3.6.1-L0 | ✓ | 3.6.1 | 20+连接器 |
lensesio/fast-data-dev:3.3.1 | LKD 3.3.1-L0 | ✓ | 3.3.1 | 20+连接器 |
lensesio/fast-data-dev:2.6.2 | LKD 2.6.2-L0 | ✓ | 2.6.2 | 30+连接器 |
lensesio/fast-data-dev:2.5.1 | LKD 2.5.1-L0 | ✓ | 2.5.1 | 30+连接器 |
lensesio/fast-data-dev:2.4.1 | LKD 2.4.1-L0 | ✓ | 2.4.1 | 30+连接器 |
lensesio/fast-data-dev:2.3.2 | LKD 2.3.2-L0 | ✓ | 2.3.2 | |
当fast-data-dev启动时,它会创建一个自签名的CA。从中它将创建一个信任存储和两对签名的密钥-证书对,一个用于代理,一个用于您的客户端。您可以从我们的Web UI访问信任存储和客户端的密钥存储,位于/certs 下(例如http://localhost:3030/certs)。密钥存储和TLS密钥的密码都是`fastdata`。 | ||||
代理的SSL端口是9093 ,可以通过BROKER_SSL_PORT 变量进行配置。 |
以下是如何使用SSL功能的简单示例。让我们启动一个fast-data-dev作为服务器:
docker run --rm --net=host -e ENABLE_SSL=1 -e RUNTESTS=0 lensesio/fast-data-dev
在新的控制台上,运行另一个fast-data-dev实例,只是为了访问Kafka命令行实用程序,并使用TLS连接到前一个容器的代理:
docker run --rm -it --net=host --entrypoint bash lensesio/fast-data-dev
root@fast-data-dev / $ wget localhost:3030/certs/truststore.jks
root@fast-data-dev / $ wget localhost:3030/certs/client.jks
root@fast-data-dev / $ kafka-producer-perf-test --topic tls_test \
--throughput 100000 --record-size 1000 --num-records 2000 \
--producer-props bootstrap.servers="localhost:9093" security.protocol=SSL \
ssl.keystore.location=client.jks ssl.keystore.password=fastdata \
ssl.key.password=fastdata ssl.truststore.location=truststore.jks \
ssl.truststore.password=fastdata
由于明文端口也可用,您可以测试两者并找出哪个更快以及快多少。;)
高级连接器设置
显式启用连接器
存在的连接器数量显著影响Kafka Connect的启动时间以及内存使用量。您可以使用CONNECTORS
环境变量显式启用连接器:
docker run --rm -it --net=host \
-e CONNECTORS=jdbc,elastic,hbase \
lensesio/fast-data-dev
请注意,如果您不启用jdbc,一些测试将失败。 这不会影响fast-data-dev的操作。
显式禁用连接器
遵循与上述段落相同的逻辑,您可以选择使用DISABLE
环境变量显式禁用某些连接器。它接受一个逗号分隔的连接器名称列表,您想要禁用这些连接器:
docker run --rm -it --net=host \
-e DISABLE=elastic,hbase \
lensesio/fast-data-dev
如果您禁用jdbc连接器,一些测试将无法运行。
启用额外的连接器
如果您有想要使用的自定义连接器,可以将其挂载到/connectors
文件夹。Kafka Connect的plugin.path
变量设置为包含/connectors/
,因此它将使用在此目录中找到的任何单jar连接器,以及在此目录的子目录中找到的任何多jar连接器。
docker run --rm -it --net=host \
-v /path/to/my/connector/connector.jar:/connectors/connector.jar \
-v /path/to/my/multijar-connector-directory:/connectors/multijar-connector-directory \
lensesio/fast-data-dev
常见问题
-
Lensesio的Fast Data Web UI工具和集成测试需要一些时间才能完全工作。特别是测试和Kafka Connect UI需要几分钟。
这是因为服务(Kafka、Schema Registry、Kafka Connect、REST Proxy)必须先启动和初始化,然后UI才能读取数据。
-
这个容器需要什么资源?
一个空闲的、新鲜的容器大约需要3GiB的RAM。由于至少有5个JVM应用程序在工作,您的实际使用情况可能会有所不同。根据我们的经验,Kafka Connect通常需要大量内存。它的堆大小默认设置为640MiB,但您可能需要更多。
-
Fast-data-dev无法正常启动,代理失败并显示:
[2016-08-23 15:54:36,772] FATAL [Kafka Server 0], Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer) java.net.UnknownHostException: [HOSTNAME]: [HOSTNAME]: unknown error
基于JVM的应用程序往往对主机名问题比较敏感。 要么运行镜像时不使用
--net=host
,并将所有端口(2181, 3030, 8081, 8082, 8083, 9092)暴露到主机上的相同端口,要么更好的做法是确保您的主机名解析为localhost地址(127.0.0.1)。通常为了实现这一点,您需要将您的主机名(区分大小写)添加到/etc/hosts
中,作为127.0.0.1之后的第一个名称。例如:127.0.0.1 MyHost localhost
详细配置选项
仅Web模式
注意: 仅Web模式将在未来被弃用。
这是一个仅适用于Linux主机的特殊模式,其中只启动Lensesio的Web UI,并期望kafka服务在本地机器上运行。它必须使用--net=host
标志运行,因此只适用于Linux:
docker run --rm -it --net=host \
-e WEB_ONLY=true \
lensesio/fast-data-dev
如果您已经有一个Kafka集群,只想要额外的Lensesio Fast Data web UI,这很有用。 请注意,我们为每个UI组件提供了单独的、轻量级的docker镜像,我们强烈建议使用这些而不是fast-data-dev。
Connect堆大小
您可以通过环境变量CONNECT_HEAP
配置Connect的堆大小。默认值为640M
:
docker run -e CONNECT_HEAP=3G -d lensesio/fast-data-dev
基本认证(密码)
我们包含了一个Web服务器来提供Lensesio UI并代理schema registry和kafka REST代理服务,以便您可以在网络上共享您的docker。如果您想要一些基本保护,请传递PASSWORD
变量,Web服务器将受到用户kafka
和您的密码的保护。如果您还想设置用户名,请设置USER
变量。
docker run --rm -it -p 3030:3030 \
-e PASSWORD=password \
lensesio/fast-data-dev
禁用测试
默认情况下,这个docker运行一组coyote测试,以确保您的容器和开发环境都设置好了。您可以使用以下标志禁用运行coyote
测试:
-e RUNTESTS=0
以root身份运行Kafka
在fast-data-dev的最新版本中,我们将Kafka的运行用户从root
切换为nobody
,因为使用root是一种不好的做法。旧的行为可能仍然是可取的,例如在我们的HDFS连接器测试中,Connect工作器需要以root用户身份运行,以便能够写入HDFS。要切换到旧的行为,请使用:
-e RUN_AS_ROOT=1
JMX指标
默认情况下启用JMX指标。如果您出于某种原因想要禁用它们(例如,您需要将端口用于其他目的),请使用DISABLE_JMX
环境变量:
docker run --rm -it --net=host \
-e DISABLE_JMX=1 \
lensesio/fast-data-dev
JMX端口硬编码为代理使用9581
,schema registry使用9582
,REST代理使用9583
,connect distributed使用9584
。Zookeeper在9585
上暴露。