我必须实现一个kafka使用者,该使用者可以从主题中读取数据,然后根据有效负载中存在的帐户ID(将接近百万)将其写入文件。假设每秒大约有3K个事件。可以为每个读取的消息打开和关闭文件吗? 还是应该考虑使用其他方法?
答案 0 :(得分:0)
如果您的帐户ID重复,那么最好开窗口。您可以通过窗口汇总1分钟内的所有事件,然后可以按键对事件进行分组并立即处理所有accountId。
这样,您不必多次打开文件。
答案 1 :(得分:0)
我假设以下情况:
解决方案:
优势:
答案 2 :(得分:0)
不能为每条消息打开一个文件,您应该缓冲固定数量的消息,然后在每个限制时写入文件。
您可以使用Confluent提供的HDFS Kafka Connector进行管理。
例如,如果配置了FieldPartitioner
并写入给定store.url=file:///tmp
的本地文件系统,则将为主题中的每个唯一accountId字段创建一个目录。然后,flush.size
配置确定单个文件中最终将包含多少条消息
由于HDFS库包含在Kafka Connect类路径中,并且它们支持本地文件系统,因此不需要安装Hadoop
创建两个属性文件后,您将以这种方式启动
bin/connect-standalone worker.properties hdfs-local-connect.properties