Kafka 上
前言:
Active Mq 似乎已经被Kafak替代了?🤔,确实现在项目似乎大多数都是由了Kafka这样的消息日志存储中心。那么我们就来学习一下kafka的知识吧。长话短说,我们开始认识一下Kafka吧!
介绍
kafka的核心:
事件流(event stream
),它可用于一些实时数据的处理,保证数据的有效性。它是可以在各种行业中构建实时数据处理和分发系统的关键工具。
- 发布事件流(
publish
):通过将数据写入Kafka主题(topic
),数据生产者可以将事件流发布到Kafka中。这些事件可以来自各种数据源,如应用程序、传感器、外部系统等。 - 订阅事件流(
subscribe
):数据消费者可以通过订阅Kafka主题来读取并处理事件流。这些消费者可以实时监控事件,或者按需回顾事件历史。 - 存储事件流(
store
):Kafka可持久地存储事件流数据,允许数据长期保存,以供后续分析、审计或回溯使用。这种存储能力对于保证数据的可靠性和可用性至关重要。 - 处理事件流(
process
):Kafka还提供了处理事件流的能力,可以实时地处理事件,也可以进行离线数据分析和处理。这允许构建实时应用程序、流处理、复杂事件处理等
kafka的运作简单来说分为两种:
通过高性能 TCP 网络协议进行通信的服务器和客户端组成
- Servers
kafka运行在集群上面,而kafka运行的服务器形成存储层又被称为代理(brokers
)。
- Clients
kafka的客户端,可以通过编写相应的kafka程序来对 servers 存储的数据进行读取、写入、处理流。
概念术语:
在kafka中
读取和写入数据又被称为记录
或者消息
事件(Event
)通常是称为消息或记录的数据单元。事件是一种以结构化或非结构化形式记录的数据,用于表示某个特定时间点发生的事情或包含有关某个事件的信息
事件又包括:
关键字、值、时间戳和元数据头
生产者(Producers
):是将事件发布(写入)到kafka中的客户端程序
消费者(Consumers
):是订阅(读取和处理)kafka中存储数据的客户端程序
生存者和消费者两者直接完全解耦。生产者永远不需要等待消费者。
主题(Topics
):上面中提到的事件就是存储在主题中的。主题可以看作是文件系统的文件夹,事件是文件。
主题可以有多个生产者写入事件、也可以有多个消费者订阅事件。事件被消费了并不会被删除。
主题是分区,就是说主题分布在不同的 kafka 代理(broker
还记得broker的概念吗? )上。(这样说吧,如果kafka部署有两个broker,那么此时我们创建了一个 topics ,那么在这两个broker 中都会存在这个 topics )。Kafka保证了对于给定的主题-分区,任何消费者总是按照事件写入的顺序来读取该分区的事件。
注:
producer client 1 :发送事件,会将事件发送到P1和P3分区(这些分区可以分布在一个或多个Broker上,具体取决于Kafka集群的设置。)。
producer client 2 :发送事件到P3、P4.发送会根据事件顺序进入,那么相应的读取也是会是相同的顺序读取
- watch talks from Kafka Summit, the main conference of the Kafka community.
Quick Start(Docker部署Kafka)
官网的kafka配置好繁琐,学习Kafka不是浪费事件在部署上面的。
我们使用docker来帮忙快速开始吧
默认大家都安装了,如果没有的话可以看看Docker系列-Linux-Centos8环境安装Docker
提醒:如果大家是用虚拟机执行的话,建议打一个快照。后续如果有操作错误的话,就执行回滚快照就好了。
上述步骤中的阿里云镜像加速,能配置最好配置,不然,下面pull kafka 镜像可能会出现问题。无法拉去。
- 拉去kafka镜像,我们选择使用docker-compose.yml文件得方式拉去最新的镜像。在终端中运行以下命令以从Docker Hub拉取官方的Kafka镜像。我们选择使用Bitnami提供的Kafka镜像(bitnami/kafka)来运行Kafka。(好处是不需要配置Zookeeper了)
bash
curl -sSL https://raw.githubusercontent.com/bitnami/containers/main/bitnami/kafka/docker-compose.yml > docker-compose.yml
docker pull bitnami/kafka:latest
我们提前先把docker-compose.yml 文件下载下来。我们到时候可以直接使用这个配置来启动我们配置得kafak镜像。
2.使用docker compose进行安装
通过我们提前下载的docker compse文件进行启动
yml
# Copyright VMware, Inc.
# SPDX-License-Identifier: APACHE-2.0
version: "2"
services:
kafka:
image: 'bitnami/kafka:latest'
ports:
- "9092:9092"
volumes:
- "kafka_data:/bitnami"
environment:
# KRaft settings
- KAFKA_CFG_NODE_ID=0
- KAFKA_CFG_PROCESS_ROLES=controller,broker
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093
# Listeners
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://:9092
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT
volumes:
kafka_data:
driver: local
version: "2"
:这是 Docker Compose 文件的版本号。
services
:定义了要创建的服务及其配置。
kafka
服务:
image: 'bitnami/kafka:latest'
:指定了使用的 Kafka 镜像。这里使用了 Bitnami 提供的 Kafka 镜像,并指定使用最新版本(latest
)。
ports
:指定了服务的端口映射,将主机的端口9092
映射到容器的端口9092
。
volumes
:定义了数据卷的映射,将主机上的kafka_data
数据卷映射到容器内的/bitnami
目录,这可以用来存储 Kafka 数据。environment
:设置了一系列环境变量,用于配置 Kafka 服务的各种参数,包括:
KAFKA_CFG_NODE_ID
:指定 Kafka 节点的ID。
KAFKA_CFG_PROCESS_ROLES
:定义 Kafka 进程的角色,这里包括controller
和broker
。
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS
:指定控制器的投票者。
KAFKA_CFG_LISTENERS
:定义 Kafka 服务的监听器。
KAFKA_CFG_ADVERTISED_LISTENERS
:定义 Kafka 服务的广告监听器。
KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP
:指定监听器的安全协议。
KAFKA_CFG_CONTROLLER_LISTENER_NAMES
:定义控制器监听器的名称。
KAFKA_CFG_INTER_BROKER_LISTENER_NAME
:定义经纪人之间的监听器名称。
volumes
:定义了一个名为kafka_data
的数据卷,用于持久化存储 Kafka 数据。
4.按照docker-compose,并且提权,查看版本是否可用
bash
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
注意:如果无法下载,就是停留在curl的下载进度,那么可能需要更新一下,切记别更新(sudo yum update),不然恢复可不好,记得快照备份。不然会崩溃的!
sudo yum install openssl
3.启动docker kafka
docker-compose up -d
注意:使用我们之前下载下来得docker-compose.yml,配置文件中的images 需要对应docker images中的tag。如果不存在对应得tag,它则会帮忙下载。不过,我们也可以提前下载。
这一步,有一个点麻烦。就是bitnami/kafka:latest 镜像不好下载。如果存在网络限制的原因。可以参考一下方式,如果镜像可以下载直接略过下面步骤
我尝试过即使配置了阿里云镜像也无法下载下来。如果,想要下载还是的需要通过代理进行下载访问。
如果,你有代理则可以进行如下配置,如果没有的话,更换其他的镜像下载即可。(不然,其他的镜像还是需要最新的kakfa。不然,你还得配置Zookeeper)
1.在 /etc/systemd/system/docker.service.d 目录下,创建一个
bashsudo mkdir -p /etc/systemd/system/docker.service.d sudo touch /etc/systemd/system/docker.service.d/http-proxy.conf
2.添加完毕之后,在文件中添加代理信息
ini[Service] Environment="HTTP_PROXY=http://0.0.0.0:8080/" Environment="HTTPS_PROXY=http://0.0.0.0:8080/" Environment="NO_PROXY=localhost,127.0.0.1"
以上内容,填写你的代理服务器。其中Environment="NO_PROXY=localhost,127.0.0.1"这个可有可无,如果你不想通过代理服务器的可以配置。
3.重启docker的守护进程以及重启
sudo systemctl daemon-reload sudo systemctl restart docker
如果,根据以上配置,我是可以成功下载到下载量最高的kafka镜像的,并且启动和配置过程都很简单。
!干,kafka还挺麻烦的,可恶的网络啊。
也可以通过配置
arduinoexport http_proxy=http://your_proxy_server:your_proxy_port export https_proxy=http://your_proxy_server:your_proxy_port
取消
bashunset http_proxy unset https_proxy
4.进入docker kafka内部
bash
docker exec -it 40d06df75f07 /bin/bash
5.停止docker kafka
arduino
docker-compose down //这会停止和移除与 docker-compose.yml 文件中定义的服务相关的容器,并清理相关的网络和数据卷。确保在包含 docker-compose.yml 文件的目录中执行该命令。
docker-compose stop //如果只想停止 Kafka 服务,而不清理容器和数据卷
总结一下:其实如果你能够访问外网,那么以上步骤对你来说就是粘贴复制了,如果无法访问外网,那就要头疼了。🤔
不多说,开始我真正得学习之旅了。不过,在开始学习之前,我们在完善一下kafka相关得知识吧。
kafka 配置
Kafka使用属性文件格式的键值对进行配置。这些值可以从文件或以编程方式提供。(一般是.property文件)
Broker Configs
基本配置如下:
advertised.listeners
是 Kafka 中的一个配置属性,用于告知客户端它们应该使用哪些监听器来连接到 Kafka Broker。它主要用于发布 Broker 的地址,以供客户端通信使用,这个地址可以不同于 listeners
配置属性。
以下是关于 advertised.listeners
的关键信息:
- 用途:它指定了应该发布到 ZooKeeper 的地址,以供客户端在连接到 Broker 时使用。这在 Broker 的网络配置与客户端连接方式不同时特别有用,特别是在 IaaS(基础设施即服务)环境中。
- 默认值 :默认情况下,它被设置为
null
,这意味着如果没有明确配置它,将使用listeners
配置属性的值。 - 有效值:可以配置为一个字符串,通常包含主机名和端口号,以指示客户端如何连接到 Broker。
- 重要性:这是一个高重要性的配置,因为它影响了客户端如何与 Kafka Broker 进行通信。
- 更新模式 :通常是针对每个 Broker 的更新,每个 Broker 可以有不同的
advertised.listeners
配置。
advertised.listeners
允许在复杂的网络环境中正确配置 Kafka Broker,以确保客户端能够正常连接到它们。
auto.create.topics.enable
是 Kafka 中的一个配置属性,用于控制是否允许自动创建主题(topics)。
以下是关于 auto.create.topics.enable
的关键信息:
- 用途:该属性用于控制是否允许 Kafka 服务器自动创建主题。如果启用了自动创建主题,当客户端尝试写入或订阅一个尚未存在的主题时,Kafka 服务器将自动创建该主题。
- 默认值 :默认情况下,该属性被设置为
true
,即允许自动创建主题。这意味着如果客户端尝试访问一个不存在的主题,Kafka 服务器将自动创建该主题。 - 有效值 :该属性是一个布尔值,可以设置为
true
(启用)或false
(禁用)。 - 重要性:这是一个高重要性的配置,因为它直接影响了 Kafka 主题的创建行为。
- 更新模式:该属性通常是只读的,这意味着在运行时很少需要更改它。通常,在启动 Kafka 服务器时设置此属性。
auto.create.topics.enable
允许控制是否自动创建主题,这在某些情况下可能很有用,但在生产环境中,可能希望将其设置为false
,以确保主题的创建是明确和受控的,从而避免潜在的问题。
auto.leader.rebalance.enable
是 Kafka 中的一个配置属性,用于启用或禁用自动分配主题分区领导者的功能。以下是关于此配置属性的关键信息:
- 用途 :
auto.leader.rebalance.enable
用于控制是否启用自动分配主题分区领导者的功能。领导者是 Kafka 中的分区(partition)的一个角色,负责处理数据的写入和读取。自动领导者平衡会定期检查分区领导者的分布情况,如果领导者不均衡,就会触发重新平衡,将分区领导者重新分配。 - 默认值 :默认情况下,该属性被设置为
true
,即启用自动领导者平衡。 - 有效值 :该属性是一个布尔值,可以设置为
true
(启用)或false
(禁用)。 - 重要性:这是一个高重要性的配置,因为它直接影响了 Kafka 集群中分区领导者的分配和平衡。
- 更新模式 :通常情况下,
auto.leader.rebalance.enable
是只读的,因此在运行时不经常需要更改。如果需要更改此配置,通常需要重新启动 Kafka 服务器。
auto.leader.rebalance.enable
允许控制是否启用自动分配分区领导者并定期检查领导者的平衡情况。这有助于确保 Kafka 集群的性能和可用性,因为它可以避免领导者的不均衡分布。
background.threads
是 Kafka 中的一个配置属性,用于设置用于各种后台处理任务的线程数量。以下是有关此配置属性的关键信息:
- 用途 :
background.threads
用于指定 Kafka 服务器用于执行后台处理任务的线程数量。这些后台处理任务包括维护和管理 Kafka 集群的各个方面,如日志清理、分区分配、leader 选举等。 - 默认值 :默认情况下,该属性被设置为
10
,这意味着 Kafka 服务器将使用 10 个线程来执行后台任务。 - 有效值 :
background.threads
必须是一个正整数,表示要分配给后台任务的线程数量。它的最小有效值为1
。 - 重要性:这是一个高重要性的配置,因为它直接影响 Kafka 服务器的性能和响应能力。增加后台线程的数量可以加速后台任务的处理,但也会增加系统的负载。
- 更新模式 :通常情况下,
background.threads
是集群范围的配置,意味着可以在整个 Kafka 集群上设置相同的值。要更改此配置,通常需要重新启动 Kafka 服务器。
background.threads
允许配置 Kafka 服务器用于执行各种后台处理任务的线程数量。增加线程数量可以提高 Kafka 服务器的并发性能,但也需要监控系统资源的使用情况以避免过度消耗资源。
broker.id
是 Kafka 中的一个重要配置属性,用于设置 Kafka 服务器的经纪人(broker)ID。以下是有关此配置属性的关键信息:
- 用途 :
broker.id
用于唯一标识 Kafka 集群中的每个经纪人(broker)。每个 Kafka 服务器都必须具有唯一的经纪人ID,以便集群中的各个服务器可以相互识别和通信。 - 默认值 :默认情况下,
broker.id
的值为-1
,表示未设置。如果未手动配置broker.id
,则 Kafka 将自动生成唯一的经纪人ID。 - 有效值 :
broker.id
必须是一个整数,用于表示经纪人的唯一标识。通常情况下,这个值由管理员手动配置,确保每个 Kafka 服务器都有一个唯一的ID。 - 重要性:这是一个高重要性的配置属性,因为它直接影响 Kafka 集群的稳定性和正确性。经纪人ID的冲突可能会导致集群中的问题,因此必须确保每个经纪人都有唯一的ID。
- 更新模式 :
broker.id
的更新模式为 read-only,这意味着一旦经纪人ID被分配,就不能再更改它。在运行 Kafka 服务器之前,必须手动为每个服务器分配唯一的ID。
broker.id
是 Kafka 集群中每个经纪人的唯一标识符。在配置 Kafka 服务器时,必须为每个经纪人分配一个唯一的ID,以确保集群的正确运行。如果未手动配置,Kafka 将自动生成经纪人ID,但这可能会导致与 ZooKeeper 生成的ID 冲突,因此最好由管理员手动配置。
compression.type
是 Kafka 中的一个配置属性,用于指定给定主题(topic)的最终压缩类型。以下是有关此配置属性的关键信息:
- 用途 :
compression.type
用于确定 Kafka 主题中消息的压缩类型。Kafka 支持多种标准压缩编解码器,包括 'gzip'、'snappy'、'lz4'、'zstd' 等。 - 默认值 :默认情况下,
compression.type
的值为 'producer',这意味着 Kafka 会保留由生产者设置的原始压缩编解码器。生产者在发送消息时可以指定使用的压缩编解码器。 - 有效值 :
compression.type
可以设置为以下值之一:- 'uncompressed':表示不使用压缩,消息以未压缩的形式存储。
- 'zstd':表示使用 Zstandard 压缩。
- 'lz4':表示使用 LZ4 压缩。
- 'snappy':表示使用 Snappy 压缩。
- 'gzip':表示使用 Gzip 压缩。
- 'producer':表示保留由生产者设置的压缩编解码器。
- 重要性 :
compression.type
的配置对于控制消息在 Kafka 中的存储方式非常重要。选择适当的压缩类型可以减小存储成本和网络带宽的使用。 - 更新模式 :
compression.type
的更新模式为 cluster-wide,这意味着配置属性的更改将影响整个 Kafka 集群,以确保所有主题都使用相同的压缩类型。
compression.type
允许为特定主题选择消息的压缩类型,以优化存储和传输效率。可以根据需求选择不同的压缩编解码器,或者使用生产者设置的原始压缩方式。
control.plane.listener.name
是 Kafka 中的一个配置属性,用于指定控制器(controller)与代理(broker)之间通信所使用的监听器名称。以下是有关此配置属性的关键信息:
-
用途 :
control.plane.listener.name
主要用于指定 Kafka 代理与控制器之间的通信使用的监听器名称。控制器是 Kafka 集群中的组件之一,负责管理和协调各个代理。 -
默认值 :默认情况下,
control.plane.listener.name
的值为 null,表示没有为控制器连接指定专用的监听器。如果未显式配置,将使用默认值。 -
配置示例 :以下是一个示例配置,其中包括了
control.plane.listener.name
的设置:rubycodelisteners = INTERNAL://192.1.1.8:9092, EXTERNAL://10.1.1.5:9093, CONTROLLER://192.1.1.8:9094 listener.security.protocol.map = INTERNAL:PLAINTEXT, EXTERNAL:SSL, CONTROLLER:SSL control.plane.listener.name = CONTROLLER
在此示例中,
control.plane.listener.name
被设置为 "CONTROLLER"。这意味着代理将使用名为 "CONTROLLER" 的监听器来接收来自控制器的连接。该监听器在listeners
和listener.security.protocol.map
中都有配置。 -
重要性 :
control.plane.listener.name
对于确保代理和控制器之间的通信以及控制器发现代理的正确监听器非常重要。它有助于确保代理和控制器之间的通信是安全的。 -
更新模式 :
control.plane.listener.name
的更新模式为 read-only,这意味着一旦设置,通常不需要经常更改。
control.plane.listener.name
用于配置 Kafka 代理以便控制器可以通过指定的监听器建立连接。这有助于确保代理和控制器之间的通信正常工作,并且能够选择适当的安全协议。
controller.listener.names
是 Kafka 中的一个配置属性,用于指定控制器(controller)使用的监听器名称列表。以下是有关此配置属性的关键信息:
-
用途 :
controller.listener.names
主要用于指定 Kafka 控制器(controller)所使用的监听器的名称列表。在 KRaft 模式下运行时,这是一个必需的配置。 -
默认值 :默认情况下,
controller.listener.names
的值为 null,表示没有指定任何监听器名称。如果未显式配置,将使用默认值。 -
配置示例 :以下是一个示例配置,其中包括了
controller.listener.names
的设置:arduinoarduinoCopy code controller.listener.names = INTERNAL, EXTERNAL
在此示例中,
controller.listener.names
被设置为 "INTERNAL" 和 "EXTERNAL"。这表示控制器可以使用这两个监听器建立连接。 -
重要性 :
controller.listener.names
对于确保在 KRaft 模式下运行时,控制器能够使用正确的监听器与代理进行通信非常重要。控制器是 Kafka 集群中的关键组件,负责管理和协调各个代理。 -
更新模式 :
controller.listener.names
的更新模式为 read-only,这意味着一旦设置,通常不需要经常更改。
controller.listener.names
用于配置 Kafka 控制器以指定其可以使用的监听器名称列表。这有助于确保在 KRaft 模式下运行时,控制器可以与代理建立正确的连接,以管理和控制 Kafka 集群。注意,在使用基于 ZooKeeper 的控制器时,不应设置此配置。
controller.quorum.election.backoff.max.ms
是 Kafka 中的一个配置属性,用于指定开始新选举之前的最大等待时间(以毫秒为单位)。以下是有关此配置属性的关键信息:
-
用途 :
controller.quorum.election.backoff.max.ms
主要用于控制在发生控制器选举失败时,启动新选举之前的最大等待时间。它是 Kafka 用于防止选举过于频繁和混乱的二进制指数回退机制的一部分。 -
默认值 :默认情况下,
controller.quorum.election.backoff.max.ms
的值为 1000 毫秒,即 1 秒。 -
配置示例 :以下是一个示例配置,其中设置了
controller.quorum.election.backoff.max.ms
的值:iniarduinoCopy code controller.quorum.election.backoff.max.ms = 5000
在此示例中,
controller.quorum.election.backoff.max.ms
被设置为 5000 毫秒,即 5 秒。这意味着在选举失败后,Kafka 控制器将等待最多 5 秒,然后再尝试新的选举。 -
重要性 :
controller.quorum.election.backoff.max.ms
对于确保在选举过程中出现问题时,Kafka 控制器不会频繁地尝试新选举非常重要。通过设置最大等待时间,可以帮助避免在选举失败时引发不必要的选举活动,从而降低系统的不稳定性。 -
更新模式 :
controller.quorum.election.backoff.max.ms
的更新模式为 read-only,通常不需要频繁更改此配置。
controller.quorum.election.backoff.max.ms
用于控制在选举失败后,Kafka 控制器等待启动新选举的最大时间。这有助于维护选举的稳定性和可靠性,以确保 Kafka 集群的正常运行。
replica.lag.time.max.ms
是 Kafka 配置属性之一,用于确定在什么情况下主题的复制副本(replica)将被移除。以下是有关此配置属性的关键信息:
-
用途 :
replica.lag.time.max.ms
用于指定在复制副本之间的数据同步方面的最大延迟时间。如果某个 follower 复制副本在一段时间内没有向 leader 发送拉取请求或者没有追赶上 leader 的日志的末尾偏移量,那么 leader 将将该 follower 从ISR(In-Sync Replicas,同步副本集)中移除。 -
默认值 :默认情况下,
replica.lag.time.max.ms
的值为 30000 毫秒(30 秒)。 -
配置示例:可以根据需要配置不同的值。例如,将延迟时间设置得更短可能会导致更频繁的副本移除,而将其设置得更长可能会容忍一些副本的较大延迟。
iniluaCopy code replica.lag.time.max.ms = 60000 # 将延迟时间设置为 60 秒
-
重要性 :
replica.lag.time.max.ms
的设置在 Kafka 集群的性能和数据一致性方面非常重要。根据业务需求,可能需要调整此值以平衡数据的一致性和延迟之间的权衡。 -
更新模式 :
replica.lag.time.max.ms
的更新模式为 read-only,这意味着它通常在 Kafka 集群的初始配置中设置,并且不需要频繁更改。
replica.lag.time.max.ms
是一个用于控制 Kafka 复制副本同步行为的配置属性。通过设置此值,可以调整何时将复制副本从同步副本集中移除,以确保数据的一致性和可用性。
replica.socket.receive.buffer.bytes
是 Kafka 的一个配置属性,它用于确定用于复制数据的网络请求的领导者(leader)的套接字接收缓冲区大小。以下是有关此配置属性的详细信息:
-
用途 :
replica.socket.receive.buffer.bytes
用于配置领导者(leader)接收来自复制副本(replica)的数据的套接字缓冲区大小。在 Kafka 中,领导者是负责写入分区数据并处理来自生产者和复制副本的请求的节点。 -
默认值 :默认情况下,
replica.socket.receive.buffer.bytes
的值为 65536 字节(64 kibibytes)。 -
配置示例:可以根据的需求调整此值。较大的缓冲区可以提高网络吞吐量,但也会占用更多的内存。例如,如果的 Kafka 集群在高负载情况下,可以考虑增加该值。
inipythonCopy code replica.socket.receive.buffer.bytes = 131072 # 将缓冲区大小增加到 128 kibibytes
-
重要性 :
replica.socket.receive.buffer.bytes
的设置对 Kafka 集群的性能非常重要,特别是对于处理大量数据的场景。通过优化套接字接收缓冲区大小,可以确保 Kafka 集群能够高效地处理复制请求。 -
更新模式 :
replica.socket.receive.buffer.bytes
的更新模式为 read-only,通常在 Kafka 集群的初始配置中设置,不需要频繁更改。
通过调整
replica.socket.receive.buffer.bytes
等网络相关的配置属性,可以根据 Kafka 集群的规模和工作负载来优化性能,以确保数据的可靠复制和高吞吐量。
replica.socket.timeout.ms
是 Kafka 的一个配置属性,用于设置网络请求的套接字超时时间。以下是有关此配置属性的详细信息:
- 用途 :
replica.socket.timeout.ms
用于确定复制副本(replica)的网络请求的套接字超时时间。在 Kafka 中,复制副本是副本分区,它们从主分区(leader)复制数据以确保高可用性和数据冗余。 - 默认值 :默认情况下,
replica.socket.timeout.ms
的值为 30000 毫秒(30秒)。 - 关于超时:套接字超时是指在网络通信中等待响应的最长时间。如果在此超时内没有收到来自目标的响应,则请求将被视为失败。在 Kafka 中,复制副本与主分区保持连接,并定期从主分区拉取数据。如果复制副本的套接字请求超时,它可能会导致数据同步问题或复制副本被移出同步(ISR)。
- 建议设置 :通常,
replica.socket.timeout.ms
的值应至少设置为replica.fetch.wait.max.ms
的值。这是因为在等待数据可用之前,复制副本需要确保其套接字不会超时。如果套接字超时太短,可能会导致不必要的请求失败。 - 重要性 :
replica.socket.timeout.ms
的设置对 Kafka 集群的可用性和数据复制的可靠性非常重要。确保将其设置为足够长的时间,以允许复制副本完成数据拉取操作,同时不会导致请求堵塞太久。 - 更新模式 :
replica.socket.timeout.ms
的更新模式为 read-only,通常在 Kafka 集群的初始配置中设置,不需要频繁更改。
请注意,在特定场景下,可能需要根据 Kafka 集群的工作负载和网络状况来调整此值,以确保数据的可靠复制和性能。
在特定场景下,可能需要根据 Kafka 集群的工作负载和网络状况来调整此值,以确保数据的可靠复制和性能。
request.timeout.ms
是 Kafka 客户端的一个配置属性,用于控制客户端等待请求响应的最大时间。以下是有关此配置属性的详细信息:
- 用途 :
request.timeout.ms
用于确定 Kafka 客户端等待请求响应的最长时间。当客户端发送请求到 Kafka 服务器后,它将等待响应,如果在规定的时间内未收到响应,客户端可以选择重新发送请求(如果重试配置允许)或将请求标记为失败。 - 默认值 :默认情况下,
request.timeout.ms
的值为 30000 毫秒(30秒)。 - 关于超时:请求超时是指客户端等待响应的最长时间。如果在此时间内未收到来自 Kafka 服务器的响应,客户端将根据重试策略采取进一步的操作。这可以确保客户端不会无限期地等待响应,从而避免请求在长时间等待后一直处于挂起状态。
- 建议设置 :根据的应用程序需求和网络延迟情况,可以调整
request.timeout.ms
的值。如果的 Kafka 集群或网络连接较不稳定,可能需要将其设置得更大,以允许更长时间的响应等待。但请注意,将其设置得太长可能会导致请求等待时间过长,从而影响客户端的响应性。 - 重要性 :
request.timeout.ms
的设置对 Kafka 客户端的行为非常重要。它直接影响客户端在请求响应方面的表现和容错性。 - 更新模式 :
request.timeout.ms
的更新模式为 read-only,通常在 Kafka 客户端的配置文件中设置,不需要频繁更改。
注:
Topic-Level Configs
主题相关的配置既有服务器默认值,也有可选的每个主题覆盖。如果我们主动显示得配置了,那么默认就不会生效。
cleanup.policy
是 Kafka 配置中的一个重要属性,用于指定日志段的数据保留策略。以下是有关此配置属性的详细信息:
- 用途 :
cleanup.policy
用于确定 Kafka 日志段(Log Segment)的数据保留策略。具体而言,它定义了当达到数据保留时间或大小限制时,Kafka 该如何处理旧的日志段。此属性决定了 Kafka 消息的存储和清理方式。 - 默认值 :默认情况下,
cleanup.policy
的值为 "delete",表示旧的日志段将会被删除。 - 有效取值 :
cleanup.policy
可以设置为以下两个有效值之一:- "delete":表示使用删除策略。在此策略下,Kafka 会删除已经过期或超出大小限制的旧日志段。
- "compact":表示启用日志压缩策略。在此策略下,Kafka 会执行日志段压缩,以保留每个键(key)的最新值。
- 组合策略:还可以将 "delete" 和 "compact" 以逗号分隔的方式组合在一起,例如 "delete,compact"。这种情况下,旧的日志段将按照数据保留时间或大小配置进行删除,同时保留的日志段将进行压缩,以节省存储空间。
- 关于日志压缩:日志压缩(Log Compaction)是 Kafka 的高级特性之一,它确保每个键的最新值始终存在于日志中。这对于维护具有状态的数据非常有用,例如存储键值对,以便在发生状态更改时仅保留最新状态。
- 重要性 :
cleanup.policy
对 Kafka 集群的数据保留和存储管理至关重要。正确配置此属性可以确保数据保留与应用需求一致,同时合理利用存储资源。 - Server Default Property :
log.cleanup.policy
是 Kafka 服务器的默认属性,但可以在 Kafka 配置中进行覆盖。
根据的应用场景和数据保留需求,可以选择适当的
cleanup.policy
设置。如果需要确保历史消息不会无限制地增长,可以考虑使用 "delete" 策略。如果需要保留每个键的最新状态,可以选择 "compact" 策略。或者,根据需要组合这两种策略以兼顾存储和数据保留的要求。
compression.type
是 Kafka 配置中的一个属性,用于指定主题(topic)的最终压缩类型。以下是有关此配置属性的详细信息:
- 用途 :
compression.type
用于确定 Kafka 主题中消息的压缩方式。它指定了在将消息写入主题时使用的压缩编解码器。 - 默认值 :默认情况下,
compression.type
的值为 "producer"。这意味着 Kafka 会保留由生产者设置的原始压缩编解码器。 - 有效取值 :
compression.type
可以设置为以下几个有效值之一:- "uncompressed":表示不使用任何压缩,消息以原始形式存储。
- "zstd":表示使用 Zstandard 压缩编解码器。
- "lz4":表示使用 LZ4 压缩编解码器。
- "snappy":表示使用 Snappy 压缩编解码器。
- "gzip":表示使用 Gzip 压缩编解码器。
- "producer":表示保留由生产者设置的原始压缩编解码器。
- 重要性 :
compression.type
的设置影响了消息在 Kafka 中的存储方式。不同的压缩算法会影响存储效率和消费者的消息读取速度。适当选择压缩类型可以在存储和性能之间取得平衡。 - Server Default Property :
compression.type
也是 Kafka 服务器的默认属性,但可以在 Kafka 配置中进行覆盖。
根据的需求,可以根据以下几个方面来选择
compression.type
的设置:
- 如果希望节省存储空间并可以容忍稍微增加的 CPU 开销,可以选择一种压缩算法(例如 "zstd"、"lz4"、"snappy" 或 "gzip")。
- 如果消息已经在生产者端使用压缩算法进行了压缩,并且希望保留原始压缩方式,可以选择 "producer"。
- 如果希望消息以未经压缩的形式存储以提高写入和读取速度,并且不太关心存储空间,可以选择 "uncompressed"。
选择合适的压缩类型通常取决于的具体用例和对存储效率与性能的权衡需求。
delete.retention.ms
是 Kafka 配置中的一个属性,用于指定在已经进行了日志压缩(log compaction)的主题上保留删除标记(delete tombstone markers)的时间。以下是有关此配置属性的详细信息:
- 用途 :
delete.retention.ms
用于确定在 Kafka 主题中保留已删除消息标记(删除墓碑标记)的时间。这些标记是用于指示特定消息已被删除的元数据。 - 默认值 :默认情况下,
delete.retention.ms
的值为 86400000 毫秒,相当于 1 天。 - 有效取值 :
delete.retention.ms
的值应为大于等于 0 的整数,表示以毫秒为单位的时间。可以根据自己的需求将其设置为适当的值。如果将其设置为 0,将不会保留删除标记,删除的消息将立即清除。 - 重要性 :
delete.retention.ms
的设置与日志压缩的行为相关,影响了已删除消息的保留时间。它还对消费者在从偏移量 0 开始读取时的有效快照形成了时间约束。 - Server Default Property :
delete.retention.ms
也是 Kafka 服务器的默认属性,但可以在 Kafka 配置中进行覆盖。
根据的需求,可以根据以下几个方面来选择
delete.retention.ms
的设置:
- 如果希望删除标记(删除墓碑标记)在 Kafka 主题中保留更长的时间,以确保消息删除操作被记录并传播给所有消费者,可以将此值设置为较大的值。
- 如果不需要保留删除标记,可以将此值设置为 0,以立即清除已删除的消息。
设置
delete.retention.ms
的值通常会受到应用程序需求、数据保留策略和合规性要求的影响。不同的应用程序可能需要不同的保留时间,因此应该根据具体情况进行设置。
file.delete.delay.ms
是 Kafka 配置中的一个属性,用于指定从文件系统中删除文件之前等待的时间。以下是有关此配置属性的详细信息:
- 用途 :
file.delete.delay.ms
用于控制 Kafka 在从磁盘上删除日志段文件之前等待的时间。这个延迟是为了确保在文件删除之前有足够的时间来处理和传递文件的任何操作。 - 默认值 :默认情况下,
file.delete.delay.ms
的值为 60000 毫秒,相当于 1 分钟。 - 有效取值 :
file.delete.delay.ms
的值应为大于等于 0 的整数,表示以毫秒为单位的时间。可以根据自己的需求将其设置为适当的值。如果将其设置为 0,Kafka 将尽可能快地删除不再需要的文件。 - 重要性 :
file.delete.delay.ms
的设置涉及到磁盘空间的管理和日志维护。延迟删除文件可以确保在文件删除之前还有时间进行其他操作,如复制、备份或传输。 - Server Default Property :
file.delete.delay.ms
也是 Kafka 服务器的默认属性,但可以在 Kafka 配置中进行覆盖。
根据的需求,可以根据以下几个方面来选择
file.delete.delay.ms
的设置:
- 如果希望 Kafka 在删除文件之前等待一段时间,以确保完成一些相关操作,例如文件备份、传输或其他处理,可以将此值设置为相应的延迟时间。
- 如果不需要等待,并且希望 Kafka 尽可能快地删除不再需要的文件,可以将此值设置为 0。
设置
file.delete.delay.ms
的值通常受到磁盘空间的管理、日志维护操作和数据处理流程的影响。不同的应用程序和环境可能需要不同的设置。
flush.messages
是 Kafka 配置中的一个属性,它允许指定一个间隔,在该间隔内将强制执行对写入日志的数据的 fsync 操作。以下是有关此配置属性的详细信息:
- 用途 :
flush.messages
用于控制在日志中写入数据后,强制执行 fsync 操作的间隔。fsync 操作是将数据刷新到磁盘以确保持久性的一种机制。 - 默认值 :默认情况下,
flush.messages
的值为 9223372036854775807,表示不会根据消息数量触发 fsync 操作,而是依赖于其他机制来触发刷新。 - 有效取值 :
flush.messages
的值应为大于等于 1 的整数,表示在多少条消息写入后执行一次 fsync 操作。如果设置为 1,表示每写入一条消息都会执行 fsync 操作。 - 重要性 :
flush.messages
的设置涉及到数据持久性和性能的权衡。较小的值会增加数据持久性,但可能降低性能,因为频繁的 fsync 操作会导致磁盘写入开销增加。较大的值可以提高性能,但可能会降低数据持久性。 - Server Default Property :
flush.messages
也是 Kafka 服务器的默认属性,但可以在 Kafka 配置中进行覆盖。
一般来说,不建议显式设置
flush.messages
。相反,Kafka 倾向于依赖于操作系统的后台刷新机制,而不是在每条消息写入后都执行 fsync 操作。这是因为频繁的 fsync 操作可能会对性能产生不利影响,而 Kafka 使用复制来确保数据的持久性。如果有特殊的需求,需要更精细地控制数据的持久性,可以考虑在特定的主题上设置不同的
flush.messages
值,以满足特定需求。但在大多数情况下,建议保持默认设置。
flush.ms
是 Kafka 配置中的一个属性,它允许指定一个时间间隔,在该间隔内将强制执行对写入日志的数据的 fsync 操作。以下是有关此配置属性的详细信息:
- 用途 :
flush.ms
用于控制在日志中写入数据后,多久时间内强制执行一次 fsync 操作。fsync 操作是将数据刷新到磁盘以确保持久性的一种机制。 - 默认值 :默认情况下,
flush.ms
的值为 9223372036854775807,表示不会根据时间间隔触发 fsync 操作,而是依赖于其他机制来触发刷新。 - 有效取值 :
flush.ms
的值应为大于等于 0 的整数,表示多少毫秒后执行一次 fsync 操作。如果设置为 0,表示禁用了时间间隔触发,不会定期执行 fsync。 - 重要性 :
flush.ms
的设置涉及到数据持久性和性能的权衡。较小的值会增加数据持久性,但可能降低性能,因为频繁的 fsync 操作会导致磁盘写入开销增加。较大的值可以提高性能,但可能会降低数据持久性。 - Server Default Property :
flush.ms
也是 Kafka 服务器的默认属性,但可以在 Kafka 配置中进行覆盖。
一般来说,不建议显式设置
flush.ms
。相反,Kafka 倾向于依赖于操作系统的后台刷新机制,而不是在固定时间间隔内执行 fsync 操作。这是因为频繁的 fsync 操作可能会对性能产生不利影响,而 Kafka 使用复制来确保数据的持久性。如果有特殊的需求,需要更精细地控制数据的持久性,可以考虑在特定的主题上设置不同的
flush.ms
值,以满足特定需求。但在大多数情况下,建议保持默认设置。
注:
Producer Configs
生产者的配置:
key.serializer
是 Kafka 配置中的一个属性,它用于指定用于序列化消息键(message key)的序列化器类。以下是有关此配置属性的详细信息:
- 用途 :
key.serializer
用于确定如何将消息的键(通常是一个对象)序列化为字节流,以便将其发送到 Kafka 集群。在 Kafka 中,消息通常由键和值组成,key.serializer
用于处理消息的键部分。 - 默认值 :
key.serializer
没有默认值,因为 Kafka 不会自动选择序列化器。需要根据的特定需求选择合适的键序列化器。 - 有效取值 :
key.serializer
应该设置为实现了 Kafka 的org.apache.kafka.common.serialization.Serializer
接口的序列化器类。常见的选择包括字符串(StringSerializer
)和字节数组(ByteArraySerializer
)序列化器。除此之外,还可以编写自定义的序列化器来满足特定的需求。 - 重要性 :
key.serializer
的设置对于生产者非常重要,因为它决定了在将消息发送到 Kafka 时如何将键序列化。正确的键序列化器确保生产者能够正确地将键转换为字节流,以便 Kafka 可以理解和处理它们。 - 示例 :以下是设置
key.serializer
为字符串序列化器的示例:
ini
key.serializer=org.apache.kafka.common.serialization.StringSerializer
Kafka 使用 StringSerializer
来序列化消息的键。
根据的使用情况选择合适的键序列化器非常重要。如果消息键是字符串,则通常使用
StringSerializer
。如果键是复杂对象,可能需要编写自定义的序列化器以确保正确序列化。请根据的数据和需求选择适当的序列化器。
value.serializer
是 Kafka 配置中的一个属性,它用于指定用于序列化消息值(message value)的序列化器类。以下是关于此配置属性的详细信息:
-
用途 :
value.serializer
用于确定如何将消息的值(通常是一个对象)序列化为字节流,以便将其发送到 Kafka 集群。在 Kafka 中,消息通常由键和值组成,value.serializer
用于处理消息的值部分。 -
默认值 :
value.serializer
没有默认值,因为 Kafka 不会自动选择序列化器。需要根据的特定需求选择合适的值序列化器。 -
有效取值 :
value.serializer
应该设置为实现了 Kafka 的org.apache.kafka.common.serialization.Serializer
接口的序列化器类。常见的选择包括字符串(StringSerializer
)和字节数组(ByteArraySerializer
)序列化器。除此之外,还可以编写自定义的序列化器来满足特定的需求。 -
重要性 :
value.serializer
的设置对于生产者非常重要,因为它决定了在将消息发送到 Kafka 时如何将值序列化。正确的值序列化器确保生产者能够正确地将值转换为字节流,以便 Kafka 可以理解和处理它们。 -
示例 :以下是设置
value.serializer
为字符串序列化器的示例:iniCopy code value.serializer=org.apache.kafka.common.serialization.StringSerializer
使用
StringSerializer
来序列化消息的值。
根据的使用情况选择合适的值序列化器非常重要。如果消息值是字符串,则通常使用
StringSerializer
。如果值是复杂对象,可能需要编写自定义的序列化器以确保正确序列化。请根据的数据和需求选择适当的序列化器。
bootstrap.servers
是 Kafka 配置中的一个关键属性,它用于指定用于建立与 Kafka 集群的初始连接的主机/端口对列表。以下是有关此配置属性的详细信息:
-
用途 :
bootstrap.servers
用于告诉 Kafka 生产者或消费者应该连接到哪些 Kafka 代理服务器以建立初始连接。这是与 Kafka 集群通信的入口点。生产者使用这个配置来将消息发送到 Kafka 集群,而消费者使用它来从 Kafka 集群接收消息。 -
默认值 :默认情况下,
bootstrap.servers
配置为空字符串,这意味着必须明确指定要连接的 Kafka 代理服务器的主机和端口。 -
有效取值 :
bootstrap.servers
应该设置为一个非空字符串,其中包含一个或多个主机/端口对,这些对用逗号分隔。例如,如果的 Kafka 集群由三个代理服务器组成,可以将配置设置如下:inimakefileCopy code bootstrap.servers=host1:9092,host2:9092,host3:9092
这将告诉 Kafka 客户端在建立初始连接时使用这些服务器。
-
重要性 :
bootstrap.servers
是 Kafka 配置中的一个高度重要的属性,因为它是与 Kafka 集群建立连接的入口点。如果配置错误或不包含有效的服务器地址,则客户端将无法与 Kafka 集群通信。 -
示例:以下是一个示例配置,指定了三个 Kafka 代理服务器的主机和端口:
ini
bootstrap.servers=host1:9092,host2:9092,host3:9092
客户端在建立初始连接时使用这些服务器
bootstrap.servers
是 Kafka 客户端配置中的关键属性,它指定了与 Kafka 集群建立初始连接的服务器地址。正确配置这个属性是使用 Kafka 的关键步骤之一,以确保客户端可以与集群进行通信。
buffer.memory
是 Kafka 生产者的一个关键配置属性,用于指定生产者用于缓冲等待发送到服务器的记录的总内存字节数。以下是有关此配置属性的详细信息:
-
用途 :
buffer.memory
用于控制 Kafka 生产者可以用于缓冲待发送记录的内存总量。生产者会将记录缓冲在内存中,然后按照其配置的发送速率将它们发送到 Kafka 服务器。如果记录的发送速度快于可以传递到服务器的速度,生产者将会阻塞一段时间(由max.block.ms
控制),在此之后,如果仍然无法发送记录,它将抛出异常。 -
默认值 :默认情况下,
buffer.memory
设置为 32 MB(32 * 1024 * 1024 字节)。 -
有效取值 :
buffer.memory
应该设置为非负整数,表示字节数。通常,它应该大致对应于生产者将使用的总内存量,但不是硬限制,因为并非所有生产者使用的内存都用于缓冲。一些额外的内存将用于压缩(如果启用了压缩),以及用于维护正在传输的请求。 -
重要性 :
buffer.memory
是 Kafka 生产者配置中的高度重要属性。它直接影响了生产者能够缓冲的记录数量和生产者与服务器之间的性能。如果配置不足,生产者可能会在缓冲区已满时被阻塞,影响消息的发送速度。 -
示例 :以下是一个示例配置,将
buffer.memory
设置为 64 MB:iniarduinoCopy code buffer.memory=67108864
这将为生产者提供 64 MB 的内存来缓冲待发送的记录。
buffer.memory
用于控制 Kafka 生产者的内存缓冲区大小,确保记录可以按照适当的速率发送到 Kafka 服务器,同时避免在发送速率过快时出现内存问题。可以根据生产者的需求和可用内存来调整此配置。
compression.type
是 Kafka 生产者的一个重要配置属性,用于指定生产者生成的所有数据的压缩类型。以下是关于此配置属性的详细信息:
-
用途 :
compression.type
用于控制 Kafka 生产者生成的消息是否进行压缩。消息压缩可以减小消息传输的网络带宽占用,特别是对于文本类消息可以获得显著的性能提升。Kafka 支持以下压缩类型:none
(默认值):不进行压缩。gzip
:使用 GZIP 压缩算法进行压缩。snappy
:使用 Snappy 压缩算法进行压缩,速度较快。lz4
:使用 LZ4 压缩算法进行压缩,速度快且压缩比较好。zstd
:使用 Zstandard 压缩算法进行压缩,提供高性能和高压缩比。
-
默认值 :默认情况下,
compression.type
设置为none
,即不进行压缩。 -
有效取值 :
compression.type
可以设置为上述有效取值之一。 -
重要性 :
compression.type
是 Kafka 生产者配置中的高度重要属性。选择合适的压缩类型可以显著减少网络带宽占用,并提高数据传输的效率。 -
示例 :以下是一个示例配置,将
compression.type
设置为gzip
:inigoCopy code compression.type=gzip
这将使生产者使用 GZIP 压缩算法对生成的数据进行压缩,以减小消息的大小。
compression.type
允许控制 Kafka 生产者是否压缩生成的消息,并可以根据需求选择合适的压缩算法。选择适当的压缩类型可以帮助在减小网络带宽占用和提高传输效率之间取得平衡。
retries
是 Kafka 生产者的一个配置属性,它用于设置在发生潜在的临时错误时是否进行消息的重试发送。以下是关于此配置属性的详细信息:
-
用途 :
retries
用于控制 Kafka 生产者在发生发送错误时是否进行消息的重试。当生产者发送消息时,如果出现了潜在的临时错误,例如网络中断或无法连接到 Kafka 代理,retries
可以指定在放弃之前要重试多少次。这有助于确保消息能够成功传送到 Kafka 代理。 -
默认值 :默认情况下,
retries
设置为最大整数值2147483647
,表示生产者将尝试重试消息发送,直到达到此上限。 -
有效取值 :
retries
可以设置为大于等于0的整数值,表示允许的最大重试次数。通常情况下,如果需要重试,可以将其保留为默认值。 -
重要性 :
retries
是 Kafka 生产者配置中的高度重要属性。它可以确保消息在发生临时错误时有机会重试并成功传递。 -
示例 :以下是一个示例配置,将
retries
设置为3:inimakefileCopy code retries=3
这将允许生产者在发生发送错误时最多重试3次。
retries
允许控制 Kafka 生产者在发生潜在的临时错误时是否进行消息的重试。通常情况下,建议将其保留为默认值,以便 Kafka 生产者自动处理重试。但是,如果需要更精确地控制重试行为,可以根据需要设置此属性。如果启用幂等性(通过enable.idempotence
配置),则retries
的值必须大于0。
ssl.key.password
是 Kafka SSL 配置中的一个属性,用于指定私钥的密码。以下是关于此配置属性的详细信息:
-
用途 :
ssl.key.password
用于指定用于保护私钥的密码。私钥通常存储在 SSL 密钥库中,并且可以用密码进行保护。在 Kafka 的 SSL 配置中,私钥用于安全通信和身份验证,因此密码用于解锁私钥以便在 SSL 握手期间使用。 -
默认值 :默认情况下,
ssl.key.password
的值为null
,这意味着私钥没有密码保护。 -
有效取值 :
ssl.key.password
的值应为私钥密码的字符串。这个密码是保密的,因此应该妥善保管。 -
重要性 :
ssl.key.password
是 Kafka SSL 配置的重要组成部分,因为它确保了私钥的安全性。如果私钥有密码,那么此密码也是关键的,不应泄漏。 -
示例 :以下是一个示例配置,将
ssl.key.password
设置为私钥密码的实际值:inivbnetCopy code ssl.key.password=myPrivateKeyPassword
这里,
myPrivateKeyPassword
是私钥的实际密码。
ssl.key.password
是 Kafka SSL 配置中的一个重要属性,用于指定私钥的密码,以确保私钥的安全性和可用性。在设置 SSL 安全通信时,必须正确配置此属性。
ssl.keystore.certificate.chain
是 Kafka SSL 配置中的一个属性,用于指定 SSL 密钥库中的证书链。以下是有关此配置属性的详细信息:
-
用途 :
ssl.keystore.certificate.chain
用于指定 SSL 密钥库中的证书链。证书链通常包含服务器的公共证书以及与之相关的证书颁发机构(CA)的证书。这些证书一起构成了可信的证书链,用于客户端验证服务器的身份和建立安全连接。 -
默认值 :默认情况下,
ssl.keystore.certificate.chain
的值为null
,这意味着没有指定证书链。但在实际部署中,需要提供正确的证书链。 -
有效取值 :
ssl.keystore.certificate.chain
应该是包含证书链的字符串,通常采用 PEM 格式。PEM 格式是一种常见的证书格式,其中包含了一个或多个 X.509 证书的文本表示形式。 -
重要性 :
ssl.keystore.certificate.chain
是 Kafka SSL 配置的关键组成部分,因为它包含了用于建立 SSL 连接所需的证书信息。正确配置证书链是确保通信安全的重要步骤。 -
示例 :以下是一个示例配置,将
ssl.keystore.certificate.chain
设置为包含证书链的 PEM 格式字符串:csscssCopy codessl.keystore.certificate.chain=-----BEGIN CERTIFICATE----- MIIDizCCAnOgAwIBAgIUD7u3YKmG63v... -----END CERTIFICATE-----
这里,
-----BEGIN CERTIFICATE-----
和-----END CERTIFICATE-----
标记包围着 X.509 证书的内容。通常,需要提供完整的证书链,包括服务器证书和相关的 CA 证书。
ssl.keystore.certificate.chain
是 Kafka SSL 配置中的一个重要属性,用于指定 SSL 密钥库中的证书链,以确保 SSL 连接的安全性和正确性。在设置 SSL 安全通信时,必须正确配置此属性。
ssl.keystore.key
是 Kafka SSL 配置的一部分,用于指定 SSL 密钥库中的私钥。以下是有关此配置属性的详细信息:
-
用途 :
ssl.keystore.key
用于指定 SSL 密钥库中的私钥。私钥是与服务器证书相关联的,用于加密和解密 SSL 通信中的数据。私钥必须与证书匹配,以确保安全通信。 -
默认值 :默认情况下,
ssl.keystore.key
的值为null
,这意味着没有指定私钥。在实际部署中,需要提供正确的私钥。 -
有效取值 :
ssl.keystore.key
应该是包含私钥的字符串,通常采用 PEM 格式。PEM 格式是一种常见的私钥格式,通常使用 PKCS#8 编码。 -
重要性 :
ssl.keystore.key
是确保 SSL 连接安全的关键组成部分。正确配置私钥是确保 SSL 连接正确运行的关键步骤。 -
示例 :以下是一个示例配置,将
ssl.keystore.key
设置为包含私钥的 PEM 格式字符串:vbnetvbnetCopy codessl.keystore.key=-----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDU37/y0C7XLM5A ... -----END PRIVATE KEY-----
这里,
-----BEGIN PRIVATE KEY-----
和-----END PRIVATE KEY-----
标记包围着 PKCS#8 格式的私钥的内容。
通常,私钥文件通常需要密码保护,因此可能还需要指定 ssl.key.password
属性,以提供私钥的密码。
ssl.keystore.key
是 Kafka SSL 配置的一个重要属性,用于指定 SSL 密钥库中的私钥,以确保 SSL 连接的安全性和正确性。在设置 SSL 安全通信时,必须正确配置此属性。
ssl.keystore.location
是 Kafka SSL 配置的一部分,用于指定 SSL 密钥库文件的位置。以下是有关此配置属性的详细信息:
-
用途 :
ssl.keystore.location
用于指定 SSL 密钥库文件的路径。SSL 密钥库通常包含与服务器或客户端 SSL 证书相关联的密钥和证书链。 -
默认值 :默认情况下,
ssl.keystore.location
的值为null
,这意味着未指定密钥库文件的位置。在实际部署中,需要提供正确的密钥库文件的路径。 -
有效取值 :
ssl.keystore.location
应该是包含密钥库文件的本地文件系统路径。通常,密钥库文件使用 Java 密钥库 (JKS) 格式或 PKCS#12 格式。文件路径必须正确指向密钥库文件,以便 Kafka 服务器或客户端能够加载它。 -
重要性 :
ssl.keystore.location
是确保 SSL 安全通信的关键配置之一。指定正确的密钥库文件位置是确保 SSL 连接正确运行的关键步骤。 -
示例 :以下是一个示例配置,将
ssl.keystore.location
设置为包含密钥库文件的路径:cssjavascriptCopy code ssl.keystore.location=/path/to/your/keystore.jks
在此示例中,
/path/to/your/keystore.jks
是密钥库文件的实际路径。
ssl.keystore.location
是 Kafka SSL 配置的一个重要属性,用于指定 SSL 密钥库文件的位置,以确保 SSL 连接的安全性和正确性。在设置 SSL 安全通信时,必须正确配置此属性。
ssl.keystore.password
是 Kafka SSL 配置的一部分,用于指定密钥库文件的密码。以下是有关此配置属性的详细信息:
-
用途 :
ssl.keystore.password
用于指定密钥库文件的密码。密钥库文件通常包含与服务器或客户端 SSL 证书相关联的密钥和证书链。密码用于保护访问密钥库文件的安全性。 -
默认值 :默认情况下,
ssl.keystore.password
的值为null
,这意味着未指定密钥库密码。但是,对于实际部署,需要为密钥库文件指定密码,以确保安全性。 -
有效取值 :
ssl.keystore.password
应该是密钥库文件的密码。这个密码是字符串形式的。 -
重要性 :
ssl.keystore.password
是确保 SSL 安全通信的关键配置之一。它用于解锁密钥库文件,以便 Kafka 服务器或客户端能够访问其中的私钥和证书。 -
示例 :以下是一个示例配置,将
ssl.keystore.password
设置为密钥库文件的密码:iniCopy code ssl.keystore.password=your_keystore_password
在此示例中,
your_keystore_password
是实际密钥库文件的密码。
ssl.keystore.password
是 Kafka SSL 配置的一个重要属性,用于指定密钥库文件的密码,以确保 SSL 连接的安全性和正确性。在设置 SSL 安全通信时,必须正确配置此属性,以保护密钥库文件的访问。
注:
Consumer Configs
消费者配置如下:
key.deserializer
是 Kafka 生产者或消费者的配置选项之一,用于指定如何反序列化 Kafka 记录的键(key)。以下是关于 key.deserializer
的详细信息:
-
用途 :
key.deserializer
用于指定一个类,该类实现了 Kafka 的org.apache.kafka.common.serialization.Deserializer
接口。这个类负责将从 Kafka 主题中读取的二进制键数据反序列化为应用程序能够处理的格式。键通常包含与消息相关的标识符,它们对于消费者非常重要,以便正确处理消息。 -
默认值 :
key.deserializer
的默认值为空,这意味着用户必须显式地指定用于反序列化键的类。 -
有效取值 :
key.deserializer
应指定一个 Java 类,该类实现了org.apache.kafka.common.serialization.Deserializer
接口。 -
重要性 :
key.deserializer
对于 Kafka 消费者非常重要,因为它定义了如何处理消息的键。使用适当的键反序列化器是确保 Kafka 消息能够被应用程序正确处理的关键。 -
示例 :以下是一个示例配置,将
key.deserializer
设置为自定义键反序列化器类:inikey.deserializer=com.example.CustomKeyDeserializer
在这里,
com.example.CustomKeyDeserializer
是自定义的键反序列化器类,它实现了org.apache.kafka.common.serialization.Deserializer
接口。
key.deserializer
是 Kafka 消费者的一个关键配置选项,它定义了如何将 Kafka 消息的键反序列化为应用程序可以处理的格式。确保正确配置此选项对于消费者的正确运行非常重要。
value.deserializer
是 Kafka 生产者或消费者的配置选项之一,用于指定如何反序列化 Kafka 记录的值(value)。以下是关于 value.deserializer
的详细信息:
-
用途 :
value.deserializer
用于指定一个类,该类实现了 Kafka 的org.apache.kafka.common.serialization.Deserializer
接口。这个类负责将从 Kafka 主题中读取的二进制值数据反序列化为应用程序能够处理的格式。值通常包含实际的消息内容,它们是应用程序需要处理的数据。 -
默认值 :
value.deserializer
的默认值为空,这意味着用户必须显式地指定用于反序列化值的类。 -
有效取值 :
value.deserializer
应指定一个 Java 类,该类实现了org.apache.kafka.common.serialization.Deserializer
接口。 -
重要性 :
value.deserializer
对于 Kafka 生产者和消费者非常重要,因为它定义了如何处理消息的内容。使用适当的值反序列化器是确保 Kafka 消息能够被应用程序正确处理的关键。 -
示例 :以下是一个示例配置,将
value.deserializer
设置为自定义值反序列化器类:inivalue.deserializer=com.example.CustomValueDeserializer
在这里,
com.example.CustomValueDeserializer
是自定义的值反序列化器类,它实现了org.apache.kafka.common.serialization.Deserializer
接口。
value.deserializer
是 Kafka 生产者和消费者的一个关键配置选项,它定义了如何将 Kafka 消息的值反序列化为应用程序可以处理的格式。确保正确配置此选项对于生产者和消费者的正确运行非常重要。
bootstrap.servers
是 Kafka 生产者和消费者的一个重要配置选项,用于指定用于建立与 Kafka 集群的初始连接的主机/端口对列表。以下是关于 bootstrap.servers
的详细信息:
-
用途 :
bootstrap.servers
用于告诉 Kafka 客户端在初始连接时应该连接到哪些 Kafka 服务器。这个配置项影响到 Kafka 客户端在集群中发现所有可用服务器的初始连接。在启动 Kafka 客户端时,它需要知道一个或多个 Kafka 服务器的地址,以便建立连接并获取关于整个 Kafka 集群的信息。 -
默认值 :
bootstrap.servers
的默认值为空字符串(""),这意味着用户必须显式指定用于连接到 Kafka 集群的初始主机/端口对。 -
有效取值 :
bootstrap.servers
应该是一个非空字符串,其中包含一个或多个主机/端口对,它们以逗号分隔。每个主机/端口对的格式应该是 "host:port"。 -
重要性 :
bootstrap.servers
是 Kafka 客户端配置中的一个关键选项,因为它定义了 Kafka 客户端在初始连接时应该连接到哪些服务器。正确配置这个选项是确保 Kafka 客户端能够成功连接到 Kafka 集群的关键。 -
示例 :以下是一个示例配置,将
bootstrap.servers
设置为连接到 Kafka 集群的两个主机/端口对:inibootstrap.servers=kafka1.example.com:9092,kafka2.example.com:9092
在这个示例中,Kafka 客户端将首先尝试连接到
kafka1.example.com:9092
,如果它不可用,将尝试连接到kafka2.example.com:9092
。
bootstrap.servers
是 Kafka 客户端配置中的一个关键选项,用于指定初始连接到 Kafka 集群的主机/端口对列表。正确配置此选项是建立与 Kafka 集群的初始连接的关键。
fetch.min.bytes
是 Kafka 消费者的一个配置选项,用于指定服务器在响应 fetch 请求之前应该返回的最小数据量。以下是关于 fetch.min.bytes
的详细信息:
-
用途 :
fetch.min.bytes
用于控制 Kafka 消费者在向服务器发送 fetch 请求后等待的最小数据量。如果服务器上可用的数据不足,请求将等待足够的数据累积后再响应请求。默认设置为 1 字节,这意味着 fetch 请求将在至少 1 字节的数据可用或等待数据超时后立即响应。将此值设置为较大的值将导致服务器等待累积更多的数据,这可以略微提高服务器吞吐量,但会增加一些额外的延迟。 -
默认值 :
fetch.min.bytes
的默认值为 1 字节。 -
有效取值 :
fetch.min.bytes
应该是一个非负整数,可以设置为 0 或更大的值。如果设置为 0,则 fetch 请求将立即响应,而不等待最小数据量的累积。 -
重要性 :
fetch.min.bytes
可以影响消费者的性能和延迟。较小的值会导致更低的延迟,但可能会降低服务器吞吐量,因为服务器将更频繁地响应 fetch 请求。较大的值会增加延迟,但可能提高服务器吞吐量。 -
示例 :以下是一个示例配置,将
fetch.min.bytes
设置为 100 字节:inifetch.min.bytes=100
在这个示例中,Kafka 消费者将等待至少 100 字节的数据累积,然后才会响应 fetch 请求。
fetch.min.bytes
是 Kafka 消费者配置中的一个选项,用于控制消费者在 fetch 请求中等待的最小数据量。配置此选项可以影响消费者的性能和延迟,可以根据具体的需求进行调整。
group.id
是 Kafka 消费者配置的一个重要选项,用于标识消费者属于哪个消费者组。以下是关于 group.id
的详细信息:
-
用途 :
group.id
用于唯一标识一个消费者组。在 Kafka 中,消费者可以组成消费者组,每个组可以订阅一个或多个主题,并且组内的消费者共享主题的分区。group.id
的主要作用是将消费者归类到不同的消费者组,以便进行协调和管理。 -
默认值 :
group.id
的默认值为null
,但通常情况下,它是必须显式设置的,特别是当消费者需要使用组管理功能(如subscribe(topic)
)或 Kafka 基于偏移量的管理策略时。 -
有效取值 :
group.id
应该是一个唯一的字符串,用于标识消费者组。每个消费者组都应该有一个不同的group.id
。通常,group.id
由应用程序或开发人员提供。 -
重要性 :
group.id
是非常重要的配置项,因为它决定了消费者如何与 Kafka 服务器进行协调。每个消费者组都应该有一个唯一的group.id
,以确保 Kafka 正确管理分配给组的分区。 -
示例 :以下是一个示例配置,设置
group.id
为 "my-consumer-group":csharpgroup.id=my-consumer-group
在这个示例中,
my-consumer-group
是消费者组的唯一标识符,用于将一组消费者组织在一起,并协调它们的消费活动。
group.id
是 Kafka 消费者配置中的一个必要选项,用于标识消费者属于哪个消费者组。它对于实现消费者组的分布式消息处理非常重要。
heartbeat.interval.ms
是 Kafka 消费者配置的一个重要选项,它用于设置消费者向 Kafka 的消费者协调器发送心跳的时间间隔。以下是关于 heartbeat.interval.ms
的详细信息:
-
用途 :
heartbeat.interval.ms
用于控制消费者向 Kafka 消费者协调器发送心跳的频率。这些心跳用于确保消费者的会话保持活动状态,并在新的消费者加入或离开消费者组时促进重新平衡。这个配置对于维持消费者组的稳定性和正常运行非常重要。 -
默认值 :
heartbeat.interval.ms
的默认值为 3000 毫秒(3秒)。 -
有效取值 :通常情况下,
heartbeat.interval.ms
的值应该设置为小于session.timeout.ms
,但一般不应该设置得太高,通常不超过session.timeout.ms
的三分之一。可以根据需要将其设置得更低,以控制正常重新平衡所需的时间。 -
重要性 :
heartbeat.interval.ms
对于维持消费者组的活动状态和协调工作非常重要。如果心跳间隔设置得太长,消费者可能会被认为已经离线,导致重新平衡。 -
示例 :以下是一个示例配置,将
heartbeat.interval.ms
设置为 1000 毫秒(1秒):iniheartbeat.interval.ms=1000
在这个示例中,消费者将每秒向 Kafka 消费者协调器发送一次心跳,以确保其会话保持活动状态。
heartbeat.interval.ms
用于控制消费者向 Kafka 消费者协调器发送心跳的频率,以维持消费者组的稳定性和协调工作。根据应用程序的需求,可以适当调整心跳间隔的值。
max.partition.fetch.bytes
是 Kafka 消费者配置的一个关键选项,用于控制每个分区从服务器获取的最大数据量。以下是关于 max.partition.fetch.bytes
的详细信息:
-
用途 :
max.partition.fetch.bytes
用于控制每个分区从 Kafka 服务器获取的最大数据量。Kafka 消费者以批量的方式获取记录,这个选项限制了每个分区每次获取的数据量。 -
默认值 :
max.partition.fetch.bytes
的默认值为 1,048,576 字节,相当于 1 Mebibyte(1MB)。 -
有效取值 :
max.partition.fetch.bytes
的值可以设置为任何大于或等于零的整数。如果设置为零,表示不限制获取的数据量,即尝试获取分区的所有可用数据。否则,它将限制每个分区每次获取的数据量。 -
重要性 :
max.partition.fetch.bytes
对于控制消费者从服务器获取的数据量非常重要。通过调整这个选项,可以控制每次获取的数据大小,以满足应用程序的需求和性能限制。 -
示例 :以下是一个示例配置,将
max.partition.fetch.bytes
设置为 524,288 字节(0.5MB):inimax.partition.fetch.bytes=524288
在这个示例中,每次从服务器获取数据的最大限制为 0.5MB,这可以用于限制单个请求的大小,以减少网络带宽和内存消耗。
max.partition.fetch.bytes
是一个重要的 Kafka 消费者配置选项,用于控制每个分区从服务器获取的最大数据量。根据应用程序的需求和性能要求,可以调整这个值。
session.timeout.ms
是 Kafka 消费者配置的一个关键选项,用于检测客户端故障并触发 Kafka 消费者组中的重新平衡。以下是关于 session.timeout.ms
的详细信息:
-
用途 :
session.timeout.ms
用于检测客户端是否处于活动状态。Kafka 消费者定期发送心跳信号给代理服务器,以表明它仍然活动。如果在session.timeout.ms
规定的时间内没有接收到来自客户端的心跳信号,代理服务器将认为该客户端已失效,并将其从消费者组中移除,然后触发重新平衡。 -
默认值 :
session.timeout.ms
的默认值为 45,000 毫秒,即 45 秒。 -
有效取值 :
session.timeout.ms
的值必须在代理服务器的配置中允许的范围内,该范围由group.min.session.timeout.ms
和group.max.session.timeout.ms
配置项决定。通常,这两个配置项用于确保客户端提供的session.timeout.ms
在可接受的范围内。 -
重要性 :
session.timeout.ms
对于确保消费者组的正常运行非常重要。它可以帮助检测故障的消费者并及时进行重新平衡,以确保分区的均衡分配。 -
示例 :以下是一个示例配置,将
session.timeout.ms
设置为 30,000 毫秒(30秒):inisession.timeout.ms=30000
在这个示例中,如果消费者在 30 秒内没有发送心跳信号,代理服务器将认为该消费者失效,并触发重新平衡。
session.timeout.ms
是 Kafka 消费者配置中的一个关键选项,用于检测客户端故障并触发重新平衡。根据应用程序的需求和性能要求,可以调整这个值,但必须确保它在代理服务器配置的允许范围内。
auto.offset.reset
是 Kafka 消费者配置的一个重要选项,用于确定当消费者在启动时没有初始偏移量,或者当前偏移量在服务器上不再存在时应该采取的操作。以下是关于 auto.offset.reset
的详细信息:
-
用途 :
auto.offset.reset
用于控制消费者在以下情况下的行为:- 当消费者首次订阅主题或者在特定分区没有存储偏移量信息时。
- 当服务器上的偏移量信息不再存在,例如由于数据被删除。
-
有效取值 :
auto.offset.reset
可以设置为以下几个值之一:latest
(默认值):将偏移量自动重置为最新的可用偏移量。这意味着消费者将从最新的消息开始消费。earliest
:将偏移量自动重置为最早的可用偏移量。这意味着消费者将从主题中最早的消息开始消费。none
:如果没有找到消费者组的先前偏移量,将抛出异常,通知消费者。- 其他值:如果设置为任何其他值,也会抛出异常,通知消费者。
-
重要性 :
auto.offset.reset
对于消费者的行为和数据的消费方式非常重要。根据所需的行为和数据消费策略,可以选择合适的选项。 -
示例 :以下是一些示例配置
auto.offset.reset
的示例:-
设置为
latest
:iniauto.offset.reset=latest
消费者将从最新的消息开始消费,即使没有存储的偏移量信息。
-
设置为
earliest
:iniauto.offset.reset=earliest
消费者将从主题中最早的消息开始消费,即使没有存储的偏移量信息。
-
设置为
none
:iniauto.offset.reset=none
如果没有找到消费者组的先前偏移量,将抛出异常。
-
auto.offset.reset
允许配置消费者在没有初始偏移量或偏移量不存在时的行为。根据的需求,可以选择将消费者配置为从最早的消息、最新的消息开始消费,或者在没有偏移量信息时抛出异常。这取决于的数据消费策略和应用程序行为的要求。
enable.auto.commit
是 Kafka 消费者配置的一个选项,用于确定是否启用自动提交消费者的偏移量。以下是关于 enable.auto.commit
的详细信息:
-
用途 :
enable.auto.commit
用于控制消费者是否应在后台定期自动提交偏移量。偏移量是用于跟踪消费者在主题中的进度的重要参数。 -
有效取值 :
enable.auto.commit
可以设置为以下几个值之一:true
(默认值):启用自动提交。这意味着消费者会定期自动提交当前处理的偏移量。提交的频率由auto.commit.interval.ms
配置项控制。false
:禁用自动提交。这意味着消费者不会自动提交偏移量,需要在适当的时候手动提交偏移量。
-
重要性 :
enable.auto.commit
对于偏移量管理和消息处理方式非常重要。启用自动提交可以确保消费者的偏移量得到定期提交,但可能会导致某些情况下的偏移量丢失。禁用自动提交可以让更精细地控制偏移量的提交。 -
示例 :以下是一些示例配置
enable.auto.commit
的示例:-
启用自动提交:
inienable.auto.commit=true
消费者将定期自动提交偏移量。
-
禁用自动提交:
inienable.auto.commit=false
消费者将禁用自动提交,需要手动提交偏移量。
-
enable.auto.commit
允许控制消费者是否应该在后台定期自动提交偏移量。可以根据应用程序的需求选择启用或禁用自动提交。如果启用,消费者将根据配置的时间间隔定期提交偏移量。如果禁用,需要手动管理偏移量的提交。
注:
Kafka Connect Configs
配置如下:
config.storage.topic
是 Kafka 连接器配置的一个重要选项,用于指定存储连接器配置的 Kafka 主题的名称。以下是有关 config.storage.topic
的详细信息:
-
用途 :
config.storage.topic
用于确定连接器配置应存储在 Kafka 集群中的哪个主题中。连接器配置是连接器的设置和参数,它们定义了连接器的行为,包括数据源和目标以及数据传输方式等。 -
有效取值 :
config.storage.topic
应设置为有效的 Kafka 主题名称,该主题将用于存储连接器配置。 -
重要性 :
config.storage.topic
对于连接器的配置和运行非常重要。它确保了连接器配置可以在 Kafka 集群中的可靠主题上进行存储和管理。 -
示例 :以下是一个示例配置
config.storage.topic
的示例:inipropertiesCopy code config.storage.topic=my-connector-configs
在这个示例中,
my-connector-configs
是用于存储连接器配置的 Kafka 主题的名称。
config.storage.topic
是连接器配置的关键配置项,它定义了连接器配置存储在 Kafka 中的位置。确保将其设置为适当的 Kafka 主题,以便连接器可以正常工作并使用正确的配置。
group.id
是 Apache Kafka Connect 的一个重要配置项,用于唯一标识 Kafka Connect 集群中的工作节点(worker)。以下是关于 group.id
的详细信息:
-
用途 :
group.id
用于唯一标识 Kafka Connect 集群中的工作节点。每个工作节点都必须具有唯一的group.id
。它是 Connect 集群中的一个重要标识,用于区分不同的工作节点。 -
有效取值 :
group.id
应设置为字符串,以便唯一标识工作节点。通常情况下,可以自行选择group.id
的值,确保它在 Connect 集群中是唯一的。 -
重要性 :
group.id
对于 Kafka Connect 集群的正常运行非常重要。它确保了每个工作节点都有唯一的标识,以便 Kafka Connect 可以有效地协调任务的分配和处理。 -
示例 :以下是一个示例配置
group.id
的示例:inipropertiesCopy code group.id=my-connect-cluster
在这个示例中,
my-connect-cluster
是 Kafka Connect 集群的唯一标识。
group.id
是 Kafka Connect 集群中工作节点的唯一标识,确保每个工作节点都有不同的group.id
以维持集群的正确运行。
key.converter
是 Kafka Connect 的一个关键配置项,用于指定用于将 Kafka Connect 格式与写入或读取 Kafka 的序列化形式之间进行转换的转换器类。这控制了写入或从 Kafka 读取的消息的键的格式,因为它独立于连接器,允许任何连接器与任何序列化格式一起工作。以下是有关 key.converter
的详细信息:
-
用途 :
key.converter
用于控制 Kafka Connect 写入 Kafka 或从 Kafka 读取数据时消息键的格式。它定义了如何将 Kafka Connect 数据格式转换为 Kafka 数据格式。 -
有效取值 :
key.converter
应设置为实现 Kafka Connectorg.apache.kafka.connect.converter.Converter
接口的转换器类的全限定类名。常见的选项包括 JSON 转换器、Avro 转换器等。可以根据数据的序列化格式选择合适的转换器。 -
重要性 :
key.converter
的设置对于确保数据正确传输到和从 Kafka 非常重要。它决定了消息的键在 Kafka 中的格式,因此需要与的数据格式和序列化格式保持一致。 -
示例 :以下是一个示例配置
key.converter
的示例,使用了 JSON 转换器:inipropertiesCopy code key.converter=org.apache.kafka.connect.json.JsonConverter
在这个示例中,
org.apache.kafka.connect.json.JsonConverter
是 JSON 格式的转换器。
key.converter
是 Kafka Connect 的一个关键配置项,它定义了如何将 Kafka Connect 数据格式转换为 Kafka 数据格式。确保选择与的数据格式和序列化格式兼容的转换器。
offset.storage.topic
是 Kafka Connect 的一个重要配置项,用于指定存储源连接器偏移量的 Kafka 主题的名称。这个配置项非常关键,因为它决定了连接器将偏移量信息写入或读取的 Kafka 主题。以下是有关 offset.storage.topic
的详细信息:
-
用途 :
offset.storage.topic
用于指定 Kafka Connect 用于存储源连接器偏移量信息的 Kafka 主题。偏移量信息包括连接器处理的每个分区的当前偏移量,以便在重新启动连接器时能够继续从上次停止的位置处理数据。 -
有效取值 :
offset.storage.topic
应设置为 Kafka 集群中已存在的有效主题的名称。这个主题将用于存储偏移量信息,因此需要在 Kafka 中提前创建。 -
重要性 :
offset.storage.topic
的设置对于确保连接器可以正确管理偏移量信息非常关键。这有助于连接器在发生故障或重新启动时从上次停止的位置继续处理数据。 -
示例 :以下是一个示例配置
offset.storage.topic
的示例:inipropertiesCopy code offset.storage.topic=my-offsets
在这个示例中,
my-offsets
是存储源连接器偏移量信息的 Kafka 主题的名称。
offset.storage.topic
是 Kafka Connect 的一个重要配置项,用于指定存储源连接器偏移量的 Kafka 主题的名称。确保该主题在 Kafka 中提前创建,并在配置中正确设置。这有助于确保连接器能够在重新启动时从上次停止的位置继续处理数据。
status.storage.topic
是 Kafka Connect 的一个关键配置项,用于指定存储连接器和任务状态信息的 Kafka 主题的名称。以下是有关 status.storage.topic
的详细信息:
-
用途 :
status.storage.topic
用于指定 Kafka Connect 用于存储连接器和任务状态信息的 Kafka 主题的名称。这个配置项非常关键,因为它决定了连接器和任务状态的持久性存储位置。 -
有效取值 :
status.storage.topic
应设置为 Kafka 集群中已存在的有效主题的名称。这个主题将用于存储连接器和任务状态信息,因此需要在 Kafka 中提前创建。 -
重要性 :
status.storage.topic
的设置对于确保连接器和任务状态信息的可靠存储非常关键。这有助于监视连接器和任务的状态,以及进行故障恢复和管理。 -
示例 :以下是一个示例配置
status.storage.topic
的示例:inipropertiesCopy code status.storage.topic=my-status
在这个示例中,
my-status
是存储连接器和任务状态信息的 Kafka 主题的名称。
status.storage.topic
是 Kafka Connect 的一个关键配置项,用于指定存储连接器和任务状态信息的 Kafka 主题的名称。确保该主题在 Kafka 中提前创建,并在配置中正确设置。这有助于确保连接器和任务状态信息得以可靠地存储和监视。
value.converter
是 Kafka Connect 的一个关键配置项,用于指定连接器用于将 Kafka Connect 格式与写入或从 Kafka 读取的序列化形式之间进行转换的转换器类。这个配置项决定了写入或读取 Kafka 的消息中值的格式。以下是有关 value.converter
的详细信息:
-
用途 :
value.converter
用于指定连接器用于将 Kafka Connect 格式的数据与实际写入或从 Kafka 读取的消息中的序列化数据之间进行转换的转换器类。这个配置项非常关键,因为它决定了数据在 Kafka 中的序列化格式。 -
有效取值 :
value.converter
应设置为实现了 Kafka Connectorg.apache.kafka.connect.storage.Converter
接口的转换器类的全名。通常,Kafka Connect 支持各种转换器,包括 JSON、Avro、Schemaless、StringConverter 等。可以根据数据的序列化格式选择合适的转换器类。 -
重要性 :
value.converter
的设置对于确保数据正确序列化和反序列化非常关键。选择适当的转换器类与数据的序列化格式密切相关,因此需要根据情况进行正确配置。 -
示例 :以下是一个示例配置
value.converter
的示例,使用 JSON 转换器:inipropertiesCopy code value.converter=org.apache.kafka.connect.json.JsonConverter
在这个示例中,
org.apache.kafka.connect.json.JsonConverter
是用于将 Kafka Connect 格式的数据与 JSON 格式的数据之间进行转换的转换器类。
value.converter
是 Kafka Connect 的一个关键配置项,用于指定连接器用于将 Kafka Connect 格式的数据与写入或从 Kafka 读取的消息中的序列化数据之间进行转换的转换器类。确保选择与数据的序列化格式匹配的转换器类,并在配置中正确设置。这有助于确保数据正确地序列化和反序列化。
bootstrap.servers
是 Kafka 生产者和消费者的一个重要配置项,用于指定与 Kafka 集群建立初始连接的主机和端口对列表。以下是有关 bootstrap.servers
的详细信息:
-
用途 :
bootstrap.servers
用于指定 Kafka 客户端(如生产者或消费者)与 Kafka 集群建立初始连接时要连接的服务器列表。这是 Kafka 客户端发现完整服务器集群的起点。 -
有效取值 :
bootstrap.servers
应该设置为一个主机/端口对的逗号分隔列表。例如,broker1:9092,broker2:9092
。这个列表可以包含集群中的任何 Kafka 服务器,因为它们只用于初始连接以获取完整的集群成员列表。如果集群中的某些服务器无法连接,客户端仍然可以通过其他服务器发现整个集群。 -
重要性 :
bootstrap.servers
是 Kafka 客户端的关键配置项,它确定了客户端如何与 Kafka 集群建立初始连接。正确配置这个选项对于确保 Kafka 客户端能够与集群通信是至关重要的。 -
示例 :以下是一个示例配置
bootstrap.servers
的示例:inipropertiesCopy code bootstrap.servers=broker1:9092,broker2:9092,broker3:9092
在这个示例中,Kafka 客户端将首先尝试与
broker1
、broker2
和broker3
上的 Kafka 服务器建立初始连接。
bootstrap.servers
是 Kafka 客户端配置中的关键项,用于指定初始连接到 Kafka 集群的服务器列表。配置正确的服务器列表是与 Kafka 集群建立连接的第一步,因此确保它正确设置非常重要。这有助于客户端发现并与整个 Kafka 集群进行通信。
注:
Kafka Streams Configs
配置如下:
application.id
是用于流处理应用程序的标识符,它在 Kafka 集群内必须是唯一的。它在以下方面发挥作用:
- 默认客户端 ID 前缀 :
application.id
用作流处理应用程序的默认客户端 ID 前缀。客户端 ID 是 Kafka 客户端用于与 Kafka 集群通信的标识符之一。使用application.id
作为默认前缀可以帮助确保应用程序的 Kafka 客户端具有唯一的客户端 ID。 - 组 ID 用于成员管理 :
application.id
也用作 Kafka 消费者组的组 ID。这是 Kafka 消费者组用于协调成员的标识符。每个流处理应用程序都可以成为一个消费者组,application.id
可以确保每个应用程序的组 ID 唯一。 - 变更日志主题前缀 :在流处理中,状态存储通常由 Kafka 主题支持。
application.id
也可以用作状态存储中 changelog 主题的前缀。这有助于确保 changelog 主题的唯一性,以避免与其他应用程序的主题冲突。
application.id
是流处理应用程序的标识符,用于确保应用程序的 Kafka 客户端具有唯一的客户端 ID 和组 ID,并在状态存储中使用唯一的 changelog 主题前缀。这有助于在 Kafka 集群中正确管理和识别流处理应用程序。
num.standby.replicas
是指每个任务(task)的备用副本(standby replicas)数量。在 Kafka Streams 应用程序中,任务是处理数据流的单元,可以执行一些数据处理逻辑。备用副本是对任务的实时副本,它们可以用于故障恢复和提高容错性。
当一个任务正在执行并且其主要副本(primary replica)由于某种原因失败时,备用副本可以接管任务的处理。这有助于确保任务的处理不会因主要副本的故障而中断。
num.standby.replicas
参数用于配置备用副本的数量。通常,增加备用副本的数量可以提高容错性,因为它提供了更多的备用副本来接管任务,但这也会增加资源消耗。在配置时,你需要权衡容错性和资源消耗之间的权衡。
例如,如果将 num.standby.replicas
设置为 2,则每个任务将有一个主要副本和两个备用副本。这提供了更高的容错性,但也需要更多的资源来维护这些副本。
num.standby.replicas
参数允许你配置每个任务的备用副本数量,以提高流处理应用程序的容错性。
state.dir
参数指定了 Kafka Streams 应用程序的状态存储(state store)数据的目录位置。状态存储用于在流处理应用程序中维护和管理中间状态,以便进行数据处理和聚合。这些中间状态可以是键值对存储,帮助应用程序执行各种操作,如窗口操作、连接、过滤等。
每个 Kafka Streams 实例都需要一个唯一的状态存储目录,因为不同的实例可能在相同的文件系统上运行,并且需要避免命名冲突。
你可以通过设置 state.dir
参数来指定状态存储的目录位置。默认情况下,它的值是 /var/folders/6f/c4r3kvwd76l9c0k_59qzh_r00000gn/T//kafka-streams
,但你可以根据你的需求将其更改为其他位置。确保每个 Kafka Streams 实例都有一个唯一的目录。
以下是一个示例配置:
css
propertiesCopy code
state.dir=/path/to/state/store/directory
在上面的配置中,你需要将 /path/to/state/store/directory
替换为你希望状态存储目录的实际路径。
state.dir
参数是用于指定 Kafka Streams 应用程序状态存储目录位置的重要配置参数。确保每个实例都有唯一的目录以避免冲突。
client.id
参数是一个用于 Kafka Streams 内部组件的客户端 ID 前缀字符串。它在内部消费者、生产者和还原消费者的客户端 ID 中使用。客户端 ID 的格式通常为 <client.id>-StreamThread-<threadSequenceNumber>-<consumer|producer|restore-consumer>
。
这个参数通常用于标识与 Kafka Streams 应用程序相关的各个内部组件,以便在 Kafka 服务器日志中进行诊断和监视。设置不同的 client.id
前缀可以帮助你区分不同的组件。
虽然 client.id
参数的默认值为空字符串 ""
,但你可以根据需要将其设置为一个有意义的值,以便更好地识别和监视你的 Kafka Streams 应用程序的内部组件。
以下是一个示例配置:
ini
propertiesCopy code
client.id=my-streams-app
在上面的配置中,client.id
被设置为 my-streams-app
,这将成为内部组件客户端 ID 的前缀。
client.id
参数用于设置 Kafka Streams 应用程序内部组件的客户端 ID 前缀,以帮助你识别和监视这些组件。你可以根据需要为其指定一个有意义的值。
注:
Admin Configs
配置如下:
connections.max.idle.ms
参数用于配置在连接处于空闲状态多少毫秒后关闭这些连接。连接的空闲状态是指在没有任何网络活动的情况下连接保持打开状态的时间。
默认情况下,connections.max.idle.ms
的值为 300,000 毫秒,即 5 分钟。这意味着如果连接在 5 分钟内没有任何活动,它将被自动关闭。
你可以根据你的应用程序的需求来调整这个值。如果你的应用程序有一些长时间不使用的连接,你可以增加这个值以减少连接的频繁打开和关闭。另一方面,如果你希望尽快释放不再需要的连接以释放资源,你可以减少这个值。
根据你的网络环境和应用程序的工作负载,调整
connections.max.idle.ms
可能会对性能产生影响,因此建议进行测试以找到最适合你的场景的值。
default.api.timeout.ms
参数用于指定客户端 API 的超时时间,以毫秒为单位。这个配置作为所有未指定超时参数的客户端操作的默认超时时间。
- 参数名称:default.api.timeout.ms
- 默认值:60000 毫秒(1 分钟)
- 有效值范围:大于或等于 0 的整数
- 重要性:中等
这个参数是全局性的,它会影响所有的客户端操作,包括生产者、消费者、管理操作等。当你执行一个客户端操作而没有显式地指定超时时间时,将会使用 default.api.timeout.ms
作为该操作的超时时间。
超时时间是指客户端等待服务器响应的最大时间。如果在超时时间内未收到服务器响应,客户端将抛出超时异常。超时时间的设置对于确保客户端操作不会无限期地等待响应非常重要,同时也会影响客户端的响应速度。
default.api.timeout.ms
参数用于配置客户端 API 的默认超时时间。- 默认情况下,超时时间为 1 分钟,可以根据需要进行调整。
- 超时时间是客户端等待服务器响应的最大时间,对于确保客户端操作不会无限期地等待响应非常重要。
- 这个配置是全局性的,会影响所有的客户端操作,包括生产者、消费者、管理操作等。
request.timeout.ms
参数用于控制客户端等待请求响应的最大时间。如果在超时时间内未收到响应,客户端将会采取重新发送请求或者在重试耗尽后失败请求的方式处理。
- 参数名称:request.timeout.ms
- 默认值:30000 毫秒(30 秒)
- 有效值范围:大于或等于 0 的整数
- 重要性:中等
这个参数对于客户端与 Kafka 服务器之间的通信非常重要。它决定了客户端在发送请求后等待响应的最大时间。如果响应没有在超时时间内到达,客户端将会采取以下两种行为之一:
- 重新发送请求:客户端可能会尝试重新发送相同的请求,以便获取响应。这通常适用于某些情况下,如网络临时不稳定或服务器忙碌的情况。
- 失败请求:如果客户端的重试次数已经耗尽,但仍然未收到响应,客户端可能会将请求标记为失败,并根据应用程序的逻辑采取进一步的操作。
request.timeout.ms
的值可以根据应用程序的需求进行调整。较短的超时时间可能会导致更快的失败响应,但可能增加了请求失败的风险,而较长的超时时间可以更容忍网络不稳定或响应时间较长的情况,但可能会导致客户端等待的时间增加。
注:
System Properties
配置如下:
org.apache.kafka.disallowed.login.modules
是一个系统属性,用于禁用 SASL JAAS 配置中的问题登录模块(login modules)的使用。这个属性接受逗号分隔的登录模块名称列表。默认情况下,com.sun.security.auth.module.JndiLoginModule
登录模块被禁用。
如果用户希望启用 JndiLoginModule
,用户需要显式地重置系统属性,如下所示。我们建议用户验证配置,并只允许受信任的 JNDI 配置。有关更多详细信息,请参考 CVE-2023-25194。
css
diffCopy code
-Dorg.apache.kafka.disallowed.login.modules=
要禁用更多的登录模块,请更新系统属性,使用逗号分隔的登录模块名称列表。请确保将 JndiLoginModule
模块名称显式添加到逗号分隔的列表中,如下所示:
arduino
arduinoCopy code
-Dorg.apache.kafka.disallowed.login.modules=com.sun.security.auth.module.JndiLoginModule,com.ibm.security.auth.module.LdapLoginModule,com.ibm.security.auth.module.Krb5LoginModule
这个属性自 Kafka 版本 3.4.0 开始提供,默认情况下禁用了 com.sun.security.auth.module.JndiLoginModule
登录模块。这个属性的存在允许管理员限制哪些登录模块可以在 Kafka 中使用,以提高安全性。
注:kafka得配置太多,其实感觉能用到得都不是很多,需要的话,就去官网查看对应得配置,并查阅相关资料即可。
总结
以上内容来自Kafka官方文档的学习,我们可以从中了解到kafka相关的知识,以及它相关的配置信息。后面,我们来了解kafka的设计和kafka的API具体使用。