事件存储在Kafka群集中(必须单独安装)。 Kafka提供高可用性和复用(high availability and replication),因此如果代理或kafka代理崩溃,事件可立即用于其他接收器.
Kafka channel 可用于多种场景:
由于依赖于该版本附带的Kafka客户端,此版本的Flume需要Kafka 0.9或更高版本。 与之前的Flume版本相比,channel的配置发生了变化。
配置参数组织如下:
a1.channel.k1.type =
"kafka."
为前缀(这对于CommonClient Configs是有效的),例如:a1.channels.k1.kafka.topic
和a1.channels.k1.kafka.bootstrap.servers
。 这与hdfs接收器的运行方式没有什么不同kafka.producer
或kafka.consumer
为前缀bootstrap.servers
和acks
此版本的flume与以前的版本向后兼容,但是下表中显示了已弃用的属性,并且在配置文件中存在时会在启动时记录警告消息。
Property Name | Default | Description |
---|---|---|
type | – | 组件类型名称,需要是org.apache.flume.channel.kafka.KafkaChannel |
kafka.bootstrap.servers | - | channel使用的Kafka集群中的代理列表,可以是部分代理,但我们建议至少两个,因为HA。 格式为逗号分隔的hostname:port 列表 |
kafka.topic | flume-channel | channel将使用的Kafka主题 |
kafka.consumer.group.id | flume | channel用于向Kafka注册的消费者群组ID。 多个channel必须使用相同的topic和group ,以确保当一个代理失败时,另一个可以获取数据。请注意,使具有相同ID的non-channel消费者可能导致数据丢失。 |
parseAsFlumeEvent | true | 期望在channel中使用FlumeEvent模式的Avro基准。 如果Flume源写入通道,则应该为true ;如果其他producers正在写入channel正在使用的主题,则应为false 。 通过使用flume-ng-sdk工件提供的org.apache.flume.source.avro.AvroFlumeEvent ,可以在Flume之外解析到Kafka的Flume源消息 |
migrateZookeeperOffsets | true | 如果找不到Kafka存储的偏移量,请在Zookeeper中查找偏移量并将它们提交给Kafka。 这应该是支持从旧版本的Flume无缝Kafka客户端迁移。 迁移后,可以将其设置为false,但通常不需要这样做。 如果未找到Zookeeper偏移量,则kafka.consumer.auto.offset.reset 配置定义如何处理偏移量。 |
pollTimeout | 500 | 在消费者调用的“poll()”中等待的时间(以毫秒为单位)。https://kafka.apache.org/090/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html#poll(long) |
defaultPartitionId | – | 指定要发送到此通道中的所有事件的Kafka分区ID(整数),除非被partitionIdHeader 覆盖。 默认情况下,如果未设置此属性,则事件将由Kafka Producer的分区程序分发 - 包括key (如果指定)(或由kafka.partitioner.class 指定的分区程序)。 |
partitionIdHeader | – | 设置时,生产者将从事件头中获取使用此属性的值命名的字段的值,并将消息发送到主题的指定分区。 如果该值表示无效分区,则该事件将不被接受。 如果存在标头值,则此设置将覆盖defaultPartitionId 。 |
kafka.consumer.auto.offset.reset | latest | 当Kafka中没有初始偏移量或服务器上当前偏移量不再存在时(例如因为该数据已被删除)该怎么办:最早:自动将偏移量重置为最早的最新偏移量:自动重置偏移量 到最新的偏移量none:如果没有为消费者组找到任何其他偏移量,则向消费者抛出异常:向消费者抛出异常。 |
kafka.producer.security.protocol | PLAINTEXT | 如果使用某种级别的安全性写入Kafka,则设置为SASL_PLAINTEXT ,SASL_SSL 或SSL 。 有关安全设置的其他信息,请参见下文。 |
kafka.consumer.security.protocol | PLAINTEXT | 与kafka.producer.security.protocol 相同,但是用于从Kafkareading/consuming。 |
more producer/consumer security props | 如果使用SASL_PLAINTEXT ,则SASL_SSL 或SSL 会引用Kafka安全性以获取需要在producer/consumer上设置的其他属性。 |
不推荐使用的属性
Property Name | Default | Description |
---|---|---|
brokerList | – | channel使用的Kafka集群中的brokers列表,可以是部分brokers,但我们建议至少两个,因为HA。 格式为逗号分隔的hostname:port 列表 |
topic | flume-channel | 使用kafka.topic |
groupId | flume | 使用kafka.consumer.group.id |
readSmallestOffset | false | 使用kafka.consumer.auto.offset.reset |
注意:由于通道负载平衡的方式,代理首次启动时可能会出现重复事件
Example for agent named a1:
a1.channels.channel1.type = org.apache.flume.channel.kafka.KafkaChannel
a1.channels.channel1.kafka.bootstrap.servers = kafka-1:9092,kafka-2:9092,kafka-3:9092
a1.channels.channel1.kafka.topic = channel1
a1.channels.channel1.kafka.consumer.group.id = flume-consumer
Security and Kafka Channel:
Flume和Kafka之间的通信渠道支持安全认证和数据加密。 对于安全身份验证,可以使用Kafka 0.9.0版中的SASL / GSSAPI(Kerberos V5)或SSL(即使该参数名为SSL,实际协议是TLS实现)。
截至目前,数据加密仅由SSL / TLS提供。
将kafka.producer
| consumer.security.protocol
设置为以下任何值意味着:
警告:启用SSL时性能会下降,其大小取决于CPU类型和JVM实现。 参考:Kafka安全概述和跟踪此问题的jira:KAFKA-2561
TLS and Kafka Channel:
请阅读配置Kafka客户端SSL中描述的步骤,以了解用于微调的其他配置设置,例如以下任何一项:安全提供程序,密码套件,启用的协议,信任库或密钥库类型。
配置服务器端身份验证和数据加密的示例。
a1.channels.channel1.type = org.apache.flume.channel.kafka.KafkaChannel
a1.channels.channel1.kafka.bootstrap.servers = kafka-1:9093,kafka-2:9093,kafka-3:9093
a1.channels.channel1.kafka.topic = channel1
a1.channels.channel1.kafka.consumer.group.id = flume-consumer
a1.channels.channel1.kafka.producer.security.protocol = SSL
a1.channels.channel1.kafka.producer.ssl.truststore.location = /path/to/truststore.jks
a1.channels.channel1.kafka.producer.ssl.truststore.password =
a1.channels.channel1.kafka.consumer.security.protocol = SSL
a1.channels.channel1.kafka.consumer.ssl.truststore.location = /path/to/truststore.jks
a1.channels.channel1.kafka.consumer.ssl.truststore.password =
注意:默认情况下,未定义属性
ssl.endpoint.identification.algorithm
,因此不会执行主机名验证。 要启用主机名验证,请设置以下属性a1.channels.channel1.kafka.producer.ssl.endpoint.identification.algorithm = HTTPS
a1.channels.channel1.kafka.consumer.ssl.endpoint.identification.algorithm = HTTPS
启用后,客户端将根据以下两个字段之一验证服务器的完全限定域名(FQDN):
如果还需要客户端身份验证,则还应将以下内容添加到Flume代理配置中。 每个Flume代理都必须拥有其客户证书,该证书必须由Kafka brokers单独或通过其签名链进行信任。 常见示例是由单个根CA签署每个客户端证书,而后者又由Kafka代理信任。
a1.channels.channel1.kafka.producer.ssl.keystore.location = /path/to/client.keystore.jks
a1.channels.channel1.kafka.producer.ssl.keystore.password =
a1.channels.channel1.kafka.consumer.ssl.keystore.location = /path/to/client.keystore.jks
a1.channels.channel1.kafka.consumer.ssl.keystore.password =
如果密钥库和密钥使用不同的密码保护,则ssl.key.password属性将为consume和 producer密钥库提供所需的额外密钥:
a1.channels.channel1.kafka.producer.ssl.key.password =
a1.channels.channel1.kafka.consumer.ssl.key.password =
Kerberos and Kafka Channel:
要将Kafka通道与使用Kerberos保护的Kafka群集一起使用,请为producer和/或consumer设置上面提到的producer/consumer.security.protocol
属性。 与Kafka brokers 一起使用的Kerberos密钥表和主体在JAAS文件的“KafkaClient”部分中指定。 “Client”部分描述了Zookeeper连接(如果需要)。 有关JAAS文件内容的信息,请参阅Kafka doc。 可以通过flume-env.sh中的JAVA_OPTS指定此JAAS文件的位置以及可选的系统范围的kerberos配置:
JAVA_OPTS="$JAVA_OPTS -Djava.security.krb5.conf=/path/to/krb5.conf"
JAVA_OPTS="$JAVA_OPTS -Djava.security.auth.login.config=/path/to/flume_jaas.conf"
使用SASL_PLAINTEXT的示例安全配置:
a1.channels.channel1.type = org.apache.flume.channel.kafka.KafkaChannel
a1.channels.channel1.kafka.bootstrap.servers = kafka-1:9093,kafka-2:9093,kafka-3:9093
a1.channels.channel1.kafka.topic = channel1
a1.channels.channel1.kafka.consumer.group.id = flume-consumer
a1.channels.channel1.kafka.producer.security.protocol = SASL_PLAINTEXT
a1.channels.channel1.kafka.producer.sasl.mechanism = GSSAPI
a1.channels.channel1.kafka.producer.sasl.kerberos.service.name = kafka
a1.channels.channel1.kafka.consumer.security.protocol = SASL_PLAINTEXT
a1.channels.channel1.kafka.consumer.sasl.mechanism = GSSAPI
a1.channels.channel1.kafka.consumer.sasl.kerberos.service.name = kafka
使用SASL_SSL的示例安全配置:
a1.channels.channel1.type = org.apache.flume.channel.kafka.KafkaChannel
a1.channels.channel1.kafka.bootstrap.servers = kafka-1:9093,kafka-2:9093,kafka-3:9093
a1.channels.channel1.kafka.topic = channel1
a1.channels.channel1.kafka.consumer.group.id = flume-consumer
a1.channels.channel1.kafka.producer.security.protocol = SASL_SSL
a1.channels.channel1.kafka.producer.sasl.mechanism = GSSAPI
a1.channels.channel1.kafka.producer.sasl.kerberos.service.name = kafka
a1.channels.channel1.kafka.producer.ssl.truststore.location = /path/to/truststore.jks
a1.channels.channel1.kafka.producer.ssl.truststore.password =
a1.channels.channel1.kafka.consumer.security.protocol = SASL_SSL
a1.channels.channel1.kafka.consumer.sasl.mechanism = GSSAPI
a1.channels.channel1.kafka.consumer.sasl.kerberos.service.name = kafka
a1.channels.channel1.kafka.consumer.ssl.truststore.location = /path/to/truststore.jks
a1.channels.channel1.kafka.consumer.ssl.truststore.password =
示例JAAS文件。 有关其内容的参考,请参阅SASL配置的Kafka文档中所需认证机制(GSSAPI / PLAIN)的客户端配置部分。 由于Kafka Source也可能连接到Zookeeper以进行偏移迁移,因此“Client”部分也添加到此示例中。 除非您需要偏移迁移,否则不需要这样做,或者您需要此部分用于其他安全组件。 另外,请确保Flume进程的操作系统用户对jaas和keytab文件具有读权限。
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
keyTab="/path/to/keytabs/flume.keytab"
principal="flume/flumehost1.example.com@YOURKERBEROSREALM";
};
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
keyTab="/path/to/keytabs/flume.keytab"
principal="flume/flumehost1.example.com@YOURKERBEROSREALM";
};