如何批量Kafka读取Elasticsearch

时间:2015-11-13 20:58:21

标签: elasticsearch apache-kafka kafka-consumer-api vert.x vertx3

我对卡夫卡不太熟悉,但我想知道什么是最好的方法 从Kafka批量读取数据,因此我可以使用Elasticsearch Bulk Api更快更可靠地加载数据。

顺便说一下,我正在使用Vertx为我的Kafka消费者

谢谢,

3 个答案:

答案 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这是一个非常简单的实现。