使用 flume 将数据读取和写入 kafka 通道的 Kafka 源 vs Avro 源
Kafka source vs Avro source for reading and writing data into kafka channel using flume
在 flume 中,我有 Kafka 通道,我可以从那里读取和写入数据。
如果我用Avro source和Avro sink替换Kafka source和Kafka sink,读写数据到Kafka通道的性能有什么不同?
在我看来,通过将 Kafka-source 替换为 Avro-source,我将无法从 Kafka broker 的多个分区并行读取数据,因为在 Avro-source 的情况下没有指定消费者组。如果我错了,请纠正我。
在 Flume 中,Avro RPC 源绑定到网络接口的指定 TCP 端口,因此单个 Flume 代理 运行 中只有一个 Avro 源机器可以接收发送到此端口的事件。
Avro 源旨在将两个或多个 Flume 代理连接在一起:一个或多个 Avro 接收器连接到单个 Avro 源。
正如您所指出的,使用 Kafka 作为源允许多个消费者组接收事件。然而,我对 Flume 1.6.0 的体验是,通过 Avro RPC 而不是通过 Kafka 将事件从一个 Flume 代理推送到远程主机上的另一个代理更快。
所以我最终完成了以下日志数据收集设置:
[Flume 远程收集节点上的代理] =Avro RPC=> [Flume 中央集群中的代理] =Kafka=> [中央集群多个消费组]
通过这种方式,我获得了更好的日志摄取和处理吞吐量,而且我还可以在远程站点和中央集群之间加密和压缩日志数据。然而,当 Flume 在未来的版本中添加对 Kafka 0.9.0 引入的新协议的支持时,这可能会改变,可能使 Kafka 更适合用作具有远程数据收集节点的中央集群的前端接口(参见 here).
在 flume 中,我有 Kafka 通道,我可以从那里读取和写入数据。 如果我用Avro source和Avro sink替换Kafka source和Kafka sink,读写数据到Kafka通道的性能有什么不同?
在我看来,通过将 Kafka-source 替换为 Avro-source,我将无法从 Kafka broker 的多个分区并行读取数据,因为在 Avro-source 的情况下没有指定消费者组。如果我错了,请纠正我。
在 Flume 中,Avro RPC 源绑定到网络接口的指定 TCP 端口,因此单个 Flume 代理 运行 中只有一个 Avro 源机器可以接收发送到此端口的事件。
Avro 源旨在将两个或多个 Flume 代理连接在一起:一个或多个 Avro 接收器连接到单个 Avro 源。
正如您所指出的,使用 Kafka 作为源允许多个消费者组接收事件。然而,我对 Flume 1.6.0 的体验是,通过 Avro RPC 而不是通过 Kafka 将事件从一个 Flume 代理推送到远程主机上的另一个代理更快。
所以我最终完成了以下日志数据收集设置:
[Flume 远程收集节点上的代理] =Avro RPC=> [Flume 中央集群中的代理] =Kafka=> [中央集群多个消费组]
通过这种方式,我获得了更好的日志摄取和处理吞吐量,而且我还可以在远程站点和中央集群之间加密和压缩日志数据。然而,当 Flume 在未来的版本中添加对 Kafka 0.9.0 引入的新协议的支持时,这可能会改变,可能使 Kafka 更适合用作具有远程数据收集节点的中央集群的前端接口(参见 here).