我对卡夫卡不太熟悉,但我想知道什么是最好的方法 从Kafka批量读取数据,因此我可以使用Elasticsearch Bulk Api更快更可靠地加载数据。
顺便说一下,我正在使用Vertx为我的Kafka消费者
谢谢,
答案 0 :(得分:4)
我不知道这是否是最佳方法,但当我开始寻找类似的功能时,我找不到任何现成的框架。我找到了这个项目:
https://github.com/reachkrishnaraj/kafka-elasticsearch-standalone-consumer/tree/branch2.0
并开始为它做贡献,因为它没有做我想要的所有事情,也不容易扩展。现在2.0版本非常可靠,我们在公司的生产中使用它来处理/索引每天300M +事件。
这不是自我宣传:) - 只是分享我们如何做同样类型的工作。当然,现在也可能有其他选择。
答案 1 :(得分:1)
https://github.com/confluentinc/kafka-connect-elasticsearch
或者你可以尝试这个来源
https://github.com/reachkrishnaraj/kafka-elasticsearch-standalone-consumer
作为标准Jar运行
** 1。将代码下载到$ INDEXER_HOME目录。
** 2。 cp $ INDEXER_HOME / src / main / resources / kafka-es-indexer.properties.template /your/absolute/path/kafka-es-indexer.properties文件 - 更新所有相关属性,如评论中所述
** 3。 cp $ INDEXER_HOME / src / main / resources / logback.xml.template /your/absolute/path/logback.xml
指定要存储日志的目录:
根据需要调整最大大小和日志文件数
** 4。构建/创建应用程序jar(确保已安装MAven):
@Controller
public class ReportsViewController {
private static final Logger logger = LoggerFactory.getLogger(ReportsViewController.class);
@RequestMapping(value="/reports",method=RequestMethod.GET)
public String displayReports(ModelMap model) {
logger.info("Start of displayReports()...............");
ReportsViewBean report = new ReportsViewBean();
report.setReportTypes(getReportType());
model.addAttribute("report", report);
logger.info("End of displayReports()...............");
return "reportsView";
}
@RequestMapping(value="/reports/save",method=RequestMethod.POST)
public String updateReports(@ModelAttribute("query") String query) {
System.out.println("username" + query);
return "reportsView";
}
private List<String> getReportType() {
List<String> type = new ArrayList<String>();
type.add("Adhoc");
type.add("Schedule");
return type;
}
}
将在$ INDEXER_HOME / bin中创建kafka-es-indexer-2.0.jar。所有依赖项都将放入$ INDEXER_HOME / bin / lib。所有JAR依赖项都通过kafka-es-indexer-2.0.jar manifest链接。
** 5。编辑你的$ INDEXER_HOME / run_indexer.sh脚本: - 如果需要,使其可执行(chmod a + x $ INDEXER_HOME / run_indexer.sh) - 更新标有&#34;改变你的环境的属性&#34;评论 - 根据您的环境
** 6。运行应用[使用JDK1.8]:
cd $INDEXER_HOME
mvn clean package
答案 2 :(得分:0)
我使用了Spark流,使用Scala这是一个非常简单的实现。