The double-decker vessel was moored near the Hungarian parliament building on the River Danube and was hit by a cruise ship, state news agency MTI reported.
The 64-year-old Ukrainian captain of the cruise ship has been taken into custody.
Police said he was suspected of endangering water transport leading to a deadly mass accident.
The 21 people still missing had been on the sightseeing boat and rescue workers were searching the river for them.
Police spokesman Adrian Pal said a criminal investigation was under way in Hungary’s capital.
Mr Pal said it could take days to raise the boat from the river bed and did not confirm or deny whether there could still be bodies trapped inside the hull.
MTI said there were 35 people on board: two crew and 33 South Korean tourists. The youngest passenger is believed to be a six-year-old girl.
These included 30 tourists on a package tour of Europe, two guides and one photographer, according to the South Korea-based Very Good Tour agency, which organised the trip.
The tourists were not wearing life jackets, according to a Hungarian official.
The vessel that sank has been identified as the Hableany (Mermaid), described on the sightseeing company’s website as “one of the smallest members of the fleet” at 89ft (27m) long.
It has two decks and a capacity for 60 people – 45 for sightseeing cruises – and was equipped with a 150-horsepower engine.
Lee Sang-moo (L), a senior official from the Very Good Tour that organised the South Korean group tour programme speaks to reporters
“We are mobilising every resource we have to protect human lives,” its owner, Panorama Deck Ltd, said.
Mihaly Toth, a spokesman for the company, said the Hableany was on a “routine city sightseeing trip”. He told state television he had no information about any technical problems with the boat, which he said was serviced regularly.
Fire boats and a dozen emergency vehicles – along with divers and the military – were sent to the scene to help with the rescue effort as boats docked on the river bank shone their spotlights onto the area in the heavy rain.
Seven people were rescued and were suffering from hypothermia after the incident but they were said to be in a stable condition.
Citing a statement from the interior ministry, state TV reported that one person was successfully revived after being rescued.
News site Index.hu said the person was found near the Petofi Bridge, around two miles south of parliament.
Pal Gyorfi, a spokesman for the Hungarian national ambulance service, said: “I am not inclined to say there is no hope, so I would rather say there is a minimal chance [of finding survivors].
“This is not just because of the water temperature, but the strong currents in the river, the vapour above the water surface, as well as the clothes worn by the people who fell in.
“The search is under way and we are still on the banks of the Danube river, but chances are minimal.”
Cruise line operator Viking said one of its ships, the Sigyn, was involved in the collision. It said no one aboard the Viking ship was injured, and that it is co-operating with the authorities.
Most of those on board the sightseeing boat were South Korean tourists and South Korean officials are on their way to Budapest to help with the rescue efforts.
South Korean President Moon Jae-In instructed officials to use “all available resources” to support the rescue efforts.
Mr Moon said: “What’s most important is speed.”
His spokesman said he also ordered the launch of a government task force led by the foreign minister, and has told officials to maintain close contact with the family members of the passengers.
The Danube had been flooding with very strong currents, as a rainstorm enveloped the city.
The flooding and currents made rescue efforts extremely difficult and temperatures in the water were only about 10C to 12C (50F to 54F), a rescuer told the state broadcaster.