企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 拓扑事件检查器 ## 简介 拓扑事件检查器提供了在storm拓扑的不同阶段时查看元组的功能。 这可以用于在拓扑运行时检查在拓扑管线中的a spout(喷口)或a bolt(螺栓)处发射的元组,而不用停止或重新部署拓扑。从the spouts(喷口)到the bolts(螺栓)元组的正常流动是不受找开事件记录的影响。 ## 启用事件日志记录 注意:首先事件日志记录需要将storm的"topolopy.eventlogger.executors"参数设置成非零的值。 详情请查询 [Configuration](#config) 章节内容。 可以通过在拓扑视图中的拓扑操作下单击“调试”按钮来记录事件。这会记录来自所有spouts(喷口)和bolts(螺栓)的元组以指定的采样百分比在拓扑中。 ![](https://img.kancloud.cn/43/e0/43e069668f72a9cb0adb79bc01a9a5ba_2826x526.jpg "Enable Eventlogging") Figure 1: Enable event logging at topology level. 您还可以通过转到相应的组件页面来启用特定(spout)喷口或(bolt)螺栓级别的事件记录和 单击组件操作下的“调试”。 ![](https://img.kancloud.cn/d6/6e/d66e3f2aa177871292b220679a609f57_2828x502.jpg "Enable Eventlogging at component level") Figure 2: Enable event logging at component level. ## 查看事件日志 Storm "logviewer" 应该运行查看已记录的元组。如果没有运行,则可以从Storm安装目录运行“bin/storm logviewer” 命令启动日志查看器。要查看元组,请从Storm UI中访问特定的spout(喷口)或bolt(螺栓)组件页面,然后单击组件摘要下的“事件”链接(如上图2所示)。 这将打开一个如下所示的视图,您可以在不同的页面之间导航并查看自己已记录的元组。 ![](https://img.kancloud.cn/cf/6a/cf6ae8d8f583599bca0a58c19214398e_2862x656.jpg "Viewing logged tuples") Figure 3: Viewing the logged events. 事件日志中的每一行都包含一个与从特定spout(喷口)/bolt(螺栓)(已逗号分隔的格式)发出的元组相对应的条目。 `Timestamp, Component name, Component task-id, MessageId (in case of anchoring), List of emitted values` ## 禁用事件日志 可以通过在Storm UI中的拓扑或组件操作下单击“停止调试”,在特定组件或拓扑级别上禁用事件日志。 ![](https://img.kancloud.cn/d5/4c/d54c925e9dd03e34143c0f928d3bc813_2832x380.jpg "Disable Eventlogging at topology level") Figure 4: Disable event logging at topology level. ## Configuration 事件记录通过将事件(元组)从每个组件发送到内部事件日志记录工具。默认情况下,Storm不会启动任何事件记录器任务,但可以通过在运行拓扑时设置以下参数(通过在storm.yaml中设置或通过命令传递选项)轻松更改事件记录器任务。 | Parameter | Meaning | | --- | --- | | "topology.eventlogger.executors": 0 | No event logger tasks are created (default). | | "topology.eventlogger.executors": 1 | One event logger task for the topology. | | "topology.eventlogger.executors": nil | One event logger task per worker. | ## 扩展事件日志 Strom提供了一个“IEventLogger”接口,由事件记录器螺栓用于记录事件。这个默认的实现是FileBasedEventLogger,它将事件记录到一个事件中。日志文件(`logs/workers-artifacts/<topology-id>/<worker-port>/events.log`)。可以添加“IEventLogger”接口的替代实现来扩展事件记录功能(例如,构建搜索索引或将事件记录到数据库中) ```java /** * EventLogger interface for logging the event info to a sink like log file or db * for inspecting the events via UI for debugging. _/ public interface IEventLogger { /_* * Invoked during eventlogger bolt prepare. */ void prepare(Map stormConf, TopologyContext context); ``` /** * Invoked when the {@link EventLoggerBolt} receives a tuple from the spouts or bolts that has event logging enabled. * * @param e the event */ void log(EventInfo e); /** * Invoked when the event logger bolt is cleaned up */ void close(); ``` } ```