Skip to content

Streaming Data

Understand how to stream and process BGP data efficiently.

Basic Iteration

The simplest way to process BGP data:

from pybgpkitstream import BGPStreamConfig, BGPKITStream
import datetime

config = BGPStreamConfig(
    start_time=datetime.datetime(2010, 9, 1, 0, 0),
    end_time=datetime.datetime(2010, 9, 1, 2, 0),
    collectors=["route-views.wide"],
)

stream = BGPKITStream.from_config(config)

for elem in stream:
    print(f"{elem.type}|{elem.time}|{elem.collector}|{elem.peer_asn}|{elem.fields['prefix']}")

BGPElement Structure

Each element in the stream is a BGPElement namedtuple:

pybgpkitstream.bgpelement.BGPElement

Bases: NamedTuple

Compatible with pybgpstream.BGPElem

__str__()

Credit to pybgpstream

Element Fields (Dictionary)

The fields attribute contains message-specific data:

elem.fields = {
    "prefix": "192.0.2.0/24",
    "next-hop": "192.0.2.1",
    "as-path": "2497 2498 2499",
    "communities": ["2497:100", "2498:200"],
}

Element Types

Three types of BGP messages are available:

  • R (RIB): Complete routing table snapshot
  • A (Announce): New or updated prefix announcement
  • W (Withdraw): Prefix withdrawal
for elem in stream:
    if elem.type == "R":
        print(f"RIB: {elem.prefix}{elem.fields['next-hop']}")
    elif elem.type == "A":
        print(f"Announce: {elem.prefix}")
    elif elem.type == "W":
        print(f"Withdraw: {elem.prefix}")

Live Streaming

Stream real-time BGP updates from RIS Live:

from pybgpkitstream import BGPStreamConfig, BGPKITStream

# Live mode: no start_time or end_time
config = BGPStreamConfig(
    collectors=["rrc00", "rrc01"],
    data_types=["updates"],
)

stream = BGPKITStream.from_config(config)

print("Streaming live BGP updates...")
for elem in stream:
    print(f"[{elem.collector}] {elem.type}: {elem.prefix}")

Memory Efficiency

PyBGPKITStream uses lazy loading to minimize memory usage:

  • Elements are parsed on-demand, not loaded into memory upfront
  • Large file downloads are processed chunk by chunk

Next: CLI Tool