1. A method of decentralized load distribution in an event-driven system, the method comprising the steps of: receiving a data flow to be processed by a plurality of tasks at a plurality of nodes in the event-driven system having stateful and stateless event processing components wherein the plurality of tasks are selected from the group consisting of hierarchical tasks, wherein a hierarchical task is a task that is dependent on the output of another task, nonhierarchical tasks, wherein a nonhierarchical task is a task that is not dependent on the output of another task, and mixtures thereof; collecting statistics about the execution of each task hosted at each node; creating a list of neighbor nodes, using the collected statistics, to which a task can be partially or wholly transferred; selecting at least one task at a node for consideration to migrate, also known as the target task, to a neighbor node, also known as the target node, from the list of neighbor nodes, to distribute the system load of processing the at least one task; choosing the target node to which the at least one target task can be migrated wherein the target node meets predetermined criteria in terms of load distribution quality; and establishing a load exchange protocol at each node for governing the number of migrations of target tasks, wherein local decentralized load migrations lead to overall system load distribution in the event-driven system.